Come faccio a sapere se un certificato è autofirmato o autorizzato dalla CA? Da qualche parte ho letto che soggetto e emittente autofirmato saranno uguali, è corretto?
Come faccio a sapere se un certificato è autofirmato o autorizzato dalla CA? Da qualche parte ho letto che soggetto e emittente autofirmato saranno uguali, è corretto?
Sì è vero. Quando il certificato è autofirmato, il campo emittente e oggetto contiene lo stesso valore. Inoltre, ci sarà solo questo certificato nel percorso del certificato.
Il certificato autofirmato avrà identici campi soggetto e emittente, ma a) questo non è garantito, e b) l'inverso non è vero. Solo perché i campi hanno lo stesso valore che non significa che il certificato sia autofirmato.
Ecco gli output di uno dei nostri certificati root (root-ca.crt) e intermedi (ca.crt):
$ openssl x509 -subject -issuer -noout -in root-ca.crt
subject= /C=DE/ST=Berlin/L=Berlin/O=classmarkets GmbH/CN=classmarkets CA
issuer= /C=DE/ST=Berlin/L=Berlin/O=classmarkets GmbH/CN=classmarkets CA
$ openssl x509 -subject -issuer -noout -in ca.crt
subject= /CN=classmarkets CA/C=DE/L=Berlin/O=classmarkets GmbH/ST=Berlin
issuer= /C=DE/ST=Berlin/L=Berlin/O=classmarkets GmbH/CN=classmarkets CA
Puoi vedere che i campi sono gli stessi per entrambi i certificati, anche se ca.crt è stato firmato da root-ca.crt:
$ openssl x509 -noout -text -in ca.crt | grep -A1 'Key Identifier'
X509v3 Authority Key Identifier:
keyid:A2:2D:AF:A0:D2:64:DF:30:F1:72:39:AC:21:AF:45:D6:D4:12:19:94
--
X509v3 Subject Key Identifier:
30:B0:6B:B5:56:9A:95:7C:31:4B:B2:65:95:0D:F9:EE:E8:3D:3A:C9
$ openssl x509 -noout -text -in root-ca.crt | grep -A1 'Key Identifier'
X509v3 Subject Key Identifier:
A2:2D:AF:A0:D2:64:DF:30:F1:72:39:AC:21:AF:45:D6:D4:12:19:94
Notare l'assenza dell '"identificatore chiave dell'autorità" in root-ca.crt.
RFC3280 afferma nella sezione 4.2.1.1 (sottolinea il mio):
The keyIdentifier field of the authorityKeyIdentifier extension MUST be included in all certificates generated by conforming CAs to facilitate certification path construction. There is one exception; where a CA distributes its public key in the form of a "self-signed" certificate, the authority key identifier MAY be omitted. The signature on a self-signed certificate is generated with the private key associated with the certificate's subject public key. (This proves that the issuer possesses both the public and private keys.) In this case, the subject and authority key identifiers would be identical, but only the subject key identifier is needed for certification path building.
Quindi mi sembra che l'Authority e gli identificatori di chiavi oggetto siano un indicatore molto migliore per i certificati autofirmati rispetto ai campi Emittente e Oggetto. Per un certificato autofirmato, l'identificatore della chiave di autorizzazione sarà assente o avrà lo stesso valore dell'identificativo della chiave oggetto.
@Vilican answer è tecnicamente corretto e dovrebbe fare il lavoro per la maggior parte del tempo. Ma volevo sapere se un certificato che stavo esaminando (non un particolare sito web) era usato come certificato autofirmato o era un certificato CA.
Quello che ho scoperto è che i certificati di CA root hanno lo stesso emittente e soggetto. Anche Extensions
- > Certificate Basic Constraints
indica che questo è un CA e il numero di CA intermedie consentite da firmare da questo.
Mentre i certificati autofirmati utilizzati per proteggere un sito web di solito sono non contrassegnati come CA, hanno anche un nome DNS come CN
in Subject
. E / o avere un elenco di nomi DNS / indirizzi IP consentiti in Extensions
- > Certificate subject alt name
.
Suppongo che non sia corretto controllare solo la corrispondenza di soggetto e l'emittente di un certificato. Esistono molte opzioni in cui diversi certificati con data di inizio / fine diversa o altri metadati hanno lo stesso soggetto ed emittente. Sto usando il seguente metodo per verificare che il certificato sia autofirmato:
openssl verify -CAfile /cert/to/check.pem -CApath /cert/to/check.pem /cert/to/check.pem
Se il controllo fallisce, è possibile verificare se il certificato è firmato con un altro certificato:
openssl verify -CAfile /cert/of/issuer.pem -CApath /cert/of/issuer.pem /cert/to/check.pem
La specifica dello stesso certificato di CAfile
e CApath
impedisce la corretta verifica dei certificati di default di OpenSSL.
Leggi altre domande sui tag tls certificates certificate-authority