Forse ho avuto l'impressione sbagliata su come i server dovrebbero essere configurati e su quali certificati vengono effettivamente inviati durante il messaggio del server ciao certificato. Mi sono imbattuto in questo oggi da Symantec / VeriSign:
Root installed on the server. For best practices, remove the self-signed root from the server. The certificate bundle should only include the certificate's public key, and the public key of any intermediate certificate authorities. Browsers will only trust certificates that resolve to roots that are already in their trust store, they will ignore a root certificate sent in the certificate bundle (otherwise, anyone could send any root).
Se questo è vero, e il cert root non ha bisogno di essere installato sul server, beh, ecco quello che pensavo di sapere sulla corretta configurazione del server e su come la catena viene convalidata alla radice. Poi di nuovo, quando guardo questa domanda , sotto la sezione Certificati e Autenticazione di risposta di Thomas Pornin dice:
So the client is supposed to do the following:
- Get a certificate chain ending with the server's certificate. The Certificate message from the server is supposed to contain, precisely, such a chain.
Questo dice praticamente l'opposto del messaggio di Symantec / VeriSign sopra, a meno che non stia fraintendendo qualcosa. Quindi:
-
Un server ha bisogno di installare la catena completa, inclusa la radice? In caso contrario, che cosa utilizza un browser per confrontare per la convalida poiché il server non fornirà il suo certificato di root durante l'handshake? Semplicemente guarda il certificato di identità e prendilo da lì? (Come aprire un certificato di identità sul computer locale e vedere la catena completa nel percorso di certificazione?)
-
Di nuovo, se questo è vero, che dire delle app client stand-alone che utilizzano le librerie SSL? Ciò dipenderà dall'applicazione poiché potrebbe avere metodi di costruzione dei percorsi diversi per una radice attendibile rispetto a un browser?