I certificati hanno profondità, che aumentano man mano che si scende lungo una catena di fiducia, quindi la profondità del certificato 0 emette la profondità del certificato 1, che emette la profondità del certificato 2, ecc ...
Per verificare in modo soddisfacente una catena di certificati completa, un client che si connette al tuo sito Web protetto SSL dovrebbe essere in grado di trovare gli intermediari e verificarli fino a quando non raggiunge un certificato attendibile, che in normali circostanze è un certificato CA installato con il tuo sistema operativo.
Un client arbitrario non troverà il tuo certificato di intermediario in questo caso, perché sarà dotato di tutti i soliti certificati installati con il sistema operativo, ma ovviamente non avrà il tuo intermediario ...
Un computer desktop, o server, costruito come parte di una sorta di build aziendale speciale per l'azienda, può naturalmente essere manomesso, aggiungendo certificati, e alcune aziende lo fanno, aggiungendo la propria CA radice con tutte le altre quelli predefiniti.
Il tuo server web protetto SSL può tuttavia fornire certificati intermedi (insieme al suo) al client quando si collega in modo che possa completare il processo di verifica del trust concatenato, ma ...
Il prossimo problema è che il certificato intermedio, quello rilasciato dalla tua CA, potrebbe non essere valido come CA stessa, e in tal caso non sarà accettato come certificato intermedio.
Usando openssl puoi verificarlo eseguendo 'openssl x509':
openssl x509 -text -in CERT_FILENAME
Provando questo su un certificato CA, guardando attraverso l'output, puoi vedere:
ef:47:91:0a:72:ba:9e:85:3c:7e:39:6b:62:ed:d0:
13:53:cf:52:52:e2:a8:1a:a8:27:5c:7e:08:a2:ad:
17:1d
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Key Identifier:
5C:FC:C1:89:C0:DC:DD:C7:01:0D:EA:37:73:A8:7B:F4:55:85:A5:E4
X509v3 Authority Key Identifier:
keyid:5C:FC:C1:89:C0:DC:DD:C7:01:0D:EA:37:73:A8:7B:F4:55:85:A5:E4
X509v3 Basic Constraints:
CA:TRUE
Signature Algorithm: sha1WithRSAEncryption
17:e4:1d:18:d6:43:68:75:04:11:c0:6f:72:6b:ac:eb:03:18:
1c:f3:e3:94:f8:77:b5:40:38:3b:20:cd:42:d7:de:db:7c:98:
Il bit magico che stai cercando è:
CA:TRUE
Se CA è FALSE o le estensioni x509 non sono presenti, non funzionerà come CA intermedia.
Infine, anche se hai openssl, puoi fare "openssl s_client -connect som.ssl.web.site:443 -CApath / path / to / your / CAcerts -verify 5", e si spera che dovresti, vicino al fine di un carico di output, ottieni:
Verify return code: 0 (ok)
Se il tuo intermediario non è valido come CA, otterrai:
Verify return code: 26 (unsupported certificate purpose)
Ho provato a generare una CA, quindi un certificato intermedio e un certificato di "fine" firmato dall'intermedio e, sebbene la catena di fiducia sia verificabile, utilizzata su un sito Web, non funziona. Se creo un'intermedio V3 con estensioni x509, impostando i vincoli di base di CA su TRUE, e quindi generando un certificato di 'fine' firmato da questo, ancora una volta la catena di trust è soddisfacente, ma questa volta il client Web è felice.