2017-03-02 2 views
1

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:

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.

Antwort

2

Die gesamte Kette kommt vom Client, und das oberste Element sollte die einer CA sein, der Sie in der Nachricht CertificateRequest vertraut haben. Andernfalls sollte der Client nichts senden (möglicherweise eine leere Kette).

Für Ihre Zwecke ist jedes Zertifikat, dem Sie vertrauen, ein Root. Sie müssen lediglich sicherstellen, dass das oberste Zertifikat in Ihrem eigenen vertrauenswürdigen Zertifikatsatz vorhanden ist, und dann mit der normalen Überprüfung der Kette fortfahren.

Verwandte Themen