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
**:**:**:**:**:**:**:**
openssl x509 -noout -text -in <certfile>
für jeden.