Ich muss ein Client-Zertifikat mit OpenSSL validieren. Ich habe jedoch kein Stammzertifikat (nur vertrauenswürdiges Zwischenzertifikat).Woher erhält SSL_CTX_set_verify Callback Zertifikate?
begann ich um zu sehen, wie das zu tun und fand mehrere Verbindungen:
http://openssl.6102.n7.nabble.com/Terminate-chain-at-intermediate-certificate-td6815.html
how to validate a client Certificate using the trusted internediate CA certificate?
So ziemlich die Zusammenfassung „einen Rückruf festgelegt (mit SSL_CTX_set_verify
) und Fehler in diesem Callback ignorieren ".
Der Rückruf mehrmals aufgerufen werden (für jedes Zertifikat in der Kette) und der Dokumentation sagt:
Die Zertifikatskette ist mit dem tiefsten Schachtelungsebene (das Root-CA-Zertifikat) und arbeitete nach oben geprüft Start zum Peer-Zertifikat. Auf jeder Ebene werden Signaturen und Ausstellerattribute überprüft.
Meine Frage ist, wo bekommt OpenSSL diese Zertifikatskette? Erhält es von einem Client (was bedeutet, dass sie nicht vertrauenswürdig sind) oder erhält es es von einem vertrauenswürdigen Speicher (was bedeutet, dass sie vertrauenswürdig sind).
In dem Fall, wenn nur Client-Zertifikat vom Client stammt, kann ich alle Fehler, bei denen depth> 0 (intermediate certs) ist, ziemlich ignorieren. In diesem Fall, wenn ein Client eine ganze Kette senden kann, kann ich Fehler nicht einfach ignorieren, sondern muss zusätzliche Validierung durchführen.
P.S. Mein Experiment zeigt, dass depth = 1 ein vertrauenswürdiges Zwischenzertifikat ist und depth = 0 ein Zertifikat ist, das von einem Client gesendet wird. Dies ist jedoch nicht eindeutig.