EDIT: Es tut mir wirklich leid zu sagen, dass sich das Problem auf magische Weise selbst behoben hat und ich keine Ahnung habe warum. Als Antwort auf eine der Antworten habe ich alle EKU aus der CA-Kette entfernt und es hat nicht funktioniert. Nachdem ich aus dem Urlaub zurückgekommen war, habe ich jeweils die Zertifikatskette 1 erstellt, d. H. RootCA->VPN
dann RootCA->IntermediateCA->VPN
und endlich RootCA->IntermediateCA->ServerCA->VPN
und es hat immer noch funktioniert! Ich habe keine Ahnung, warum es funktioniert hat, aber ich war begeistert. Nur um absolut sicherzugehen, dass es die Entfernung der EKU war, die es gelöst hat, ging ich zurück und fügte zufällige EKU zu CAs in der Kette hinzu, und siehe da, es funktioniert immer noch ... Das ist absolut ärgerlich und ich entschuldige mich bei all die Leute, die versucht haben zu helfen. Ich schwöre, absolut nichts anderes hat sich geändert und niemand hat in meiner Abwesenheit etwas berührt. END EDIT
Beim Versuch, einen OpenVPN-Client (Android oder Windows 7/10) mit meinem Testserver zu verbinden, wird folgende Fehlermeldung angezeigt:
FEHLER PRÜFEN: Tiefe = 1, Fehler = nicht unterstützter Zertifikatszweck: C = CA, ST = QC, L = Montreal, O = Company Inc, OU = PKI, CN = Server Certificate Authority
Ich verwende OpenVPN 2.3.7 unter OpenBSD. Ich verwende die folgende mit XCA erstellte PKI-CA-Hierarchie :
RootCA -> IntermediateCA -> ServerCA
Ich habe ein Zertifikat für meinen VPN-Server erstellt, das von meinem ServerCA signiert ist. Bitte beachten Sie die Tiefe = 1 . Dies scheint kein Problem mit dem endgültigen VPN Server-Zertifikat zu sein. OpenVPN beschwert sich über den Aussteller des VPN-Serverzertifikats. Sogar der CN in der Fehlermeldung ist der von ServerCA, NICHT vom VPN-Server.
Soweit ich feststellen konnte, muss eine Zertifizierungsstelle in der Kette keinen anderen Zweck haben als das Signieren von Zertifikaten.
Hier ist die Konfiguration des Zertifikats des VPN-Servers. Beachten Sie, dass die alte Netscape-Servererweiterung vorhanden ist, wie von OpenVPN gefordert:
nsCertType=server, email
extendedKeyUsage=serverAuth, nsSGC, ipsecEndSystem, iKEIntermediate
keyUsage=digitalSignature, keyEncipherment, dataEncipherment, keyAgreement
authorityKeyIdentifier=keyid, issuer
subjectKeyIdentifier=hash
basicConstraints=CA:FALSE
Hier ist die Konfiguration des Zertifikats der ausstellenden Zertifizierungsstelle:
crlDistributionPoints=crlDistributionPoint0_sect
extendedKeyUsage=critical,OCSPSigning
keyUsage=critical,keyCertSign, cRLSign
authorityKeyIdentifier=keyid, issuer
subjectKeyIdentifier=hash
basicConstraints=critical,CA:TRUE,pathlen:0
[crlDistributionPoint0_sect]
fullname=URI:http://pki.company.ca/server.crl
Ich habe versucht nsCertType=server
, ServerCA hinzuzufügen , aber es gab keine Änderung.
Ich habe auch endlose Forenbeiträge gesehen, in denen Leute vergessen haben, die Erweiterung nsCertType hinzuzufügen, und einen Fehler erhalten haben, der meinem ähnlich ist, aber depth=0
stattdessen mit. In meinem Fall scheint das Zertifikat des Servers in Ordnung zu sein.
Kann mir jemand sagen, warum OpenVPN sich darum kümmert, was eine Zertifizierungsstelle in der Kette tun darf (außer natürlich das Signieren von Zertifikaten)? Wie kann ich sehen, welchen "Zertifikatzweck" der Client erwartet hat? Wie kann ich OpenVPN dazu bringen, die Zertifikatkette zu akzeptieren?
Wie angefordert, ist hier das Zertifikat des VPN-Servers:
$ openssl x509 -noout -text -in vpn-server.crt
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 4 (0x4)
Signature Algorithm: sha512WithRSAEncryption
Issuer: C=CA, ST=QC, L=Montreal, O=Company Inc, OU=PKI, CN=Server Certificate Authority
Validity
Not Before: Jun 21 17:58:00 2016 GMT
Not After : Jun 21 17:58:00 2021 GMT
Subject: C=CA, ST=QC, L=Montreal, O=Company Inc, OU=VPN, CN=vpn.company.ca
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (4096 bit)
Modulus:
**:**:**:**:**:**:**:**
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
X509v3 Subject Key Identifier:
A9:EF:EB:8B:68:E2:5F:0A:5D:FC:8A:39:7D:59:BE:21:75:2A:CB:8E
X509v3 Authority Key Identifier:
keyid:60:F3:33:2C:F7:13:09:F8:5C:3C:B2:D1:0B:9D:7D:9E:86:6A:24:41
DirName:/C=CA/ST=QC/L=Montreal/O=Company Inc/OU=PKI/CN=Intermediate Certificate Authority
serial:03
X509v3 Key Usage:
Digital Signature, Key Encipherment, Data Encipherment, Key Agreement
X509v3 Extended Key Usage:
TLS Web Server Authentication, Netscape Server Gated Crypto, IPSec End System, 1.3.6.1.5.5.8.2.2
Netscape Cert Type:
SSL Server, S/MIME
Signature Algorithm: sha512WithRSAEncryption
**:**:**:**:**:**:**:**
Und hier ist das Zertifikat des Ausstellers:
$ openssl x509 -noout -text -in server-ca.crt
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 3 (0x3)
Signature Algorithm: sha512WithRSAEncryption
Issuer: C=CA, ST=QC, L=Montreal, O=Company Inc, OU=PKI, CN= Intermediate Certificate Authority
Validity
Not Before: Jun 21 17:57:00 2016 GMT
Not After : Jun 21 17:57:00 2026 GMT
Subject: C=CA, ST=QC, L=Montreal, O=Company Inc, OU=PKI, CN= Server Certificate Authority
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (4096 bit)
Modulus:
**:**:**:**:**:**:**:**
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints: critical
CA:TRUE, pathlen:0
X509v3 Subject Key Identifier:
60:F3:33:2C:F7:13:09:F8:5C:3C:B2:D1:0B:9D:7D:9E:86:6A:24:41
X509v3 Authority Key Identifier:
keyid:09:26:2E:AB:F4:C1:53:E1:10:11:DE:25:2D:20:D5:76:27:A9:FF:23
DirName:/C=CA/ST=QC/L=Montreal/O=Company Inc/OU=PKI/CN=Root Certificate Authority
serial:02
X509v3 Key Usage: critical
Digital Signature, Certificate Sign, CRL Sign
X509v3 Extended Key Usage: critical
OCSP Signing
X509v3 CRL Distribution Points:
Full Name:
URI:http://pki.company.ca/server.crl
Signature Algorithm: sha512WithRSAEncryption
**:**:**:**:**:**:**:**
quelle
openssl x509 -noout -text -in <certfile>
für jeden.Antworten:
Es ist die EKU (ExtendedKeyUsage-Erweiterung)
rfc 5280 4.2.1.12 extKeyUsage sagt
CABforum Baseline Requirements (v1.3.4) 7.2.2 g bestätigt dies, erlaubt aber zusammen mit 7.1.5 einen Fall:
Die EKU ist somit keine Einschränkung für die Verwendung eines eigenen Schlüssels durch die Zertifizierungsstelle, sondern für die Verwendung von Schlüsseln mit Zertifikaten gemäß der Zertifizierungsstelle durch die EE. Dies ist ähnlich wie die Art und Weise Policies (meistens) und NameConstraints propagieren nach unten, und im Gegensatz zu KeyUsage , die sich an die CA selbst anwenden.
Und genau das implementiert OpenSSL und damit OpenVPN mit OpenSSL. Wenn auf jedem CA-Zertifikat in einer Serverkette eine EKU vorhanden ist, muss diese serverAuth oder SGC enthalten . Ebenso muss jedes CA-Zertifikat in einer Clientkette mit EKU clientAuth enthalten.
Ihre Zwischenzertifizierungsstelle über Ihrem Server verfügt über eine EKU mit OCSPSign, jedoch nicht über serverAuth. Daher wird sie abgelehnt.
Referenz:
crypto/x509/x509_vfy.c
undcrypto/x509v3/v3_purp.c
in openssl-1.0.2hquelle
Hmm, die Easyrsa von OpenVPN erstellt folgende Zertifikate:
CA1:
CA2:
Server:
Klient:
Aber Sie haben auch diese Key Usage-Werte, also sollte Ihre Konfiguration funktionieren ... Aber es gibt keine Zwischenzertifizierungsstelle ...
Haben Sie versucht, --ca auf das Zertifikat der Stammzertifizierungsstelle und --extra-certs auf die Zwischenzertifizierungsstelle und --cert auf das Serverzertifikat zu setzen, um eine vollständige Kette zu bilden? Und vergiss nicht - Schlüssel auch.
Eigentlich habe ich es zum Laufen gebracht:
Server:
Klient:
Server conf:
Client conf:
quelle
openssl verify
sodass ich den Parameter "extra-certs" nie verwendet habe. Ich habe es mit dem Zwischenzertifikat versucht, aber es machte keinen Unterschied. Ich habe immer noch die gleiche Fehlermeldung erhalten.Ich hatte ein ähnliches Problem mit stunnel und openssl unter Linux
Ich habe festgestellt, dass die Serverseite erwartet, dass alle Client- und CA-Zertifikate Folgendes enthalten: Erweiterte Schlüsselverwendung: TLS-Webclient-Authentifizierung
Es wurde festgestellt, dass die Clientseite erwartete, dass alle Server- und CA-Zertifikate Folgendes enthalten: X509v3 Erweiterte Schlüsselverwendung: TLS-Webserverauthentifizierung
Da ich dieselben Zertifizierungsstellen zum Signieren der Client- und Serverzertifikate verwendet habe, habe ich die CA-, CA1- und CA2-Zertifikate so getestet, dass sie sowohl clientAuth als auch serverAuth enthalten, und das Problem wurde behoben.
CA, CA1 und CA2: Erweiterte X509v3-Schlüsselverwendung: TLS-Webclientauthentifizierung, TLS-Webserverauthentifizierung
Client-Zertifikat: X509v3 Erweiterte Schlüsselverwendung: TLS-Webclient-Authentifizierung
Serverzertifikat: X509v3 Erweiterte Schlüsselverwendung: TLS-Webserverauthentifizierung
quelle