Z komentarzy do mojej pierwszej odpowiedzi wynika, że istnieje ogólne nieporozumienie, co oznacza "weryfikacja certyfikatu". Spróbuję napisać krótkie wyjaśnienie, aby wyeliminować niektóre złudzeń.
Weryfikacja certyfikatu polega na sprawdzeniu podpisu na metadanych certyfikatu (tj. Przedmiocie, okresie ważności, rozszerzeniach itp.) Na niektórych podpisach kryptograficznych.
Jeśli wszystko, co musisz sprawdzić, to certyfikat z podpisem własnym, nie możesz go odróżnić od innego certyfikatu z podpisem własnym z dokładnie tymi samymi metadanymi, ale z innym kluczem, chyba że znasz klucz klucza certyfikatu z góry. I nie zapominaj, że ustanawiasz całą tę procedurę weryfikacji, aby usunąć wymóg posiadania tej wstępnej wiedzy. Dzięki regularnej weryfikacji certyfikatu nie można całkowicie usunąć wymóg jakieś pre-shared wiedza, która jest zbiorem świadectw osób trzecich, znany również jako „certyfikatów CA”. Ponieważ wiedza ta jest wstępnie udostępniona, certyfikaty te mogą być z podpisem własnym, ale pamiętaj, że otrzymałeś informacje o ważności tych certyfikatów nie z procesu weryfikacji, ale z pewnej wiedzy zewnętrznej.
Gdy masz zestaw zaufanych certyfikatów CA rozdzielonych między równorzędne, możesz ich używać do podpisywania innych certyfikatów i sprawdzania podpisów przed tą wstępnie udostępnioną wiedzą zaufanych urzędów certyfikacji.
Ale jeśli nie masz dodatkowej wiedzy na temat samopodpisanego certyfikatu, z wyjątkiem samego certyfikatu, nie możesz wysuwać żadnych założeń dotyczących zaufania do tego konkretnego certyfikatu, ponieważ może on zostać wydany przez jakiegoś złego hakera, a także przez zaufany serwer.
Przed zdobyciem certyfikatu należy uzyskać wiedzę na temat Man in the middle attack, Public key infrastructure i Public key cryptography.
Proszę zrozumieć, że ślepa weryfikacja samopodpisanego certyfikatu nie ochroni nawet sprytnego hakera we własnej sieci, nie biorąc pod uwagę ogólnego bezpieczeństwa w Internecie.
Edytuj: autor pytania wyjaśnił, że faktycznie szukał sposobu zweryfikowania podpisu verisign (lub innego urzędu certyfikacji) na certyfikacie za pomocą powiązań M2Crypto. Oto dwa przykłady:
from M2Crypto import X509, SSL
# manual validation of a signature on a certificate using a given CA cert:
ca = X509.load_cert('/path/to/ca_cert.pem')
cert = X509.load_cert('certificate_to_validate.pem')
print "Verification results:", cert.verify(ca.get_pubkey())
# adding a given CA cert to the SSL Context for verification
ctx = SSL.Context()
# load a certificate from file
ctx.load_verify_locations(cafile='/path/to/ca_cert.pem')
# or use all certificate in a CA directory
ctx.load_verify_locations(capath='/path/to/ca/dir')
# or you can specify both options at the same time.
Jeśli masz zamiar użyć katalog z wielu certyfikatów CA (która często jest wygodniejsze) trzeba zmienić nazwę każdego certyfikat <hash>.0
gdzie <hash>
jest hash podmiotu certyfikatu (otrzymany z openssl x509 -noout -hash -in cert.pem
).
Przepraszam, moje pytanie było błędne. – Bhargava
Naprawdę szukałem weryfikacji podpisanej przez Verisign przy użyciu M2Crypto. – Bhargava
Zaktualizowałem odpowiedź za pomocą przykładów M2Crypto. – abbot