编辑:我真的很抱歉,不得不说,这个问题魔术般地修复自己,我不知道为什么。 作为对其中一个答案的回应,我从CA链中删除了所有的EKU,但它不起作用。 休假回来后,我一次创build了证书链1, RootCA->VPN
然后是RootCA->IntermediateCA->VPN
,最后是RootCA->IntermediateCA->ServerCA->VPN
,它仍然工作! 我不知道为什么这是工作,但我很激动。 只是为了确定这是解决EKU的问题,我回去了,把EKU随机添加到了CA的链中,然后瞧,它仍然有效……这是绝对令人愤慨的,我很抱歉所有试图帮助的人。 我发誓,绝对没有其他改变,没有人在我不在的时候触及任何东西。 结束编辑
当试图连接OpenVPN客户端(Android或Windows 7/10)到我的testing服务器时,我收到以下错误:
VERIFY ERROR:深度= 1,错误=不支持的证书目的:C = CA,ST = QC,L =蒙特利尔,O =公司,OU = PKI,CN =服务器authentication中心
我在OpenBSD上运行OpenVPN 2.3.7。 我正在使用使用XCA创build的以下PKI CA层次结构:
RootCA -> IntermediateCA -> ServerCA
我为我的ServerCA签署的VPN服务器创build了一个证书。 请注意深度= 1 。 这似乎不是最终的VPN服务器证书的问题。 OpenVPN正在抱怨VPN服务器证书的颁发者。 即使错误消息中的CN是ServerCA NOT的VPN服务器。
就我所能确定的,连锁中的CA没有任何其他目的而不是签署证书的要求。
这是VPN服务器的证书configuration。 请注意,根据OpenVPN的要求,旧的Netscape服务器扩展在那里:
nsCertType=server, email extendedKeyUsage=serverAuth, nsSGC, ipsecEndSystem, iKEIntermediate keyUsage=digitalSignature, keyEncipherment, dataEncipherment, keyAgreement authorityKeyIdentifier=keyid, issuer subjectKeyIdentifier=hash basicConstraints=CA:FALSE
这是颁发CA的证书configuration:
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
我试着向nsCertType=server
添加nsCertType=server
,但没有任何改变。
我也看到了无尽的论坛post,人们忘了添加nsCertType扩展名,并收到类似于我的错误,但depth=0
。 在我的情况下,服务器的证书似乎没有问题。
谁能告诉我为什么OpenVPN关心什么CA允许链(除了签署证书,显然)? 我怎样才能看到客户期待的“证书目的”? 我怎样才能让OpenVPN接受证书链?
根据要求,这里是VPN服务器的证书:
$ 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 **:**:**:**:**:**:**:**
这是发行人的证书:
$ 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 **:**:**:**:**:**:**:**
这是EKU (ExtendedKeyUsage扩展)
rfc 5280 4.2.1.12 extKeyUsage说
一般来说,这个扩展只会出现在最终的实体证书中。
CABforum基线要求 (v1.3.4)7.2.2 g肯定了这一点,但随着7.1.5允许有一种情况:
对于被视为受到技术约束的从属CA证书,证书必须包含一个扩展密钥使用(EKU)扩展,指定从属CA证书有权颁发证书的所有扩展密钥使用。 anyExtendedKeyUsage KeyPurposeId不能出现在这个扩展名中。
因此,EKU不是对CA使用自己的密钥的限制,而是对CA使用带有证书的密钥的EE使用。 这与Policies(主要)和NameConstraints向下传播的方式类似,不像KeyUsage适用于CA本身。
这就是OpenSSL实现的,因此OpenSSL使用OpenVPN。 在服务器链中的每个CA证书上,如果存在EKU,则必须包含serverAuth或SGC 。 同样,EKU客户端中的每个CA证书都必须包含clientAuth。
您的服务器上方的中间CA具有OCSPSign而不是serverAuth的EKU,因此被拒绝。
参考:在openssl-1.0.2h中的crypto/x509/x509_vfy.c
和crypto/x509v3/v3_purp.c
v3_purp.c
嗯,OpenVPN的easyrsa创build这样的证书:
CA1:
X509v3 Subject Key Identifier: 87:13:73:D4:7C:9A:E1:EA:9A:F8:90:48:93:18:5A:B0:AF:B9:B6:25 X509v3 Authority Key Identifier: keyid:87:13:73:D4:7C:9A:E1:EA:9A:F8:90:48:93:18:5A:B0:AF:B9:B6:25 DirName:/CN=Easy-RSA CA serial:8B:E0:6F:16:C0:46:46:FC X509v3 Basic Constraints: CA:TRUE X509v3 Key Usage: Certificate Sign, CRL Sign
CA2:
X509v3 Basic Constraints: CA:TRUE X509v3 Subject Key Identifier: D6:60:98:E7:6E:7C:73:9A:38:62:09:EC:C7:5D:62:15:89:AA:B2:8E X509v3 Authority Key Identifier: keyid:87:13:73:D4:7C:9A:E1:EA:9A:F8:90:48:93:18:5A:B0:AF:B9:B6:25 DirName:/CN=Easy-RSA CA serial:8B:E0:6F:16:C0:46:46:FC X509v3 Key Usage: Certificate Sign, CRL Sign
服务器:
X509v3 Basic Constraints: CA:FALSE X509v3 Subject Key Identifier: 53:BA:B4:3B:87:AC:89:41:14:28:8F:C9:A2:F3:38:D4:43:90:EF:A6 X509v3 Authority Key Identifier: keyid:D6:60:98:E7:6E:7C:73:9A:38:62:09:EC:C7:5D:62:15:89:AA:B2:8E DirName:/CN=Easy-RSA CA serial:CB:8A:25:7F:5A:8A:A9:BD:63:D2:BE:B7:6C:5E:3E:75 X509v3 Key Usage: Digital Signature, Key Encipherment X509v3 Extended Key Usage: TLS Web Server Authentication
客户:
X509v3 Basic Constraints: CA:FALSE X509v3 Subject Key Identifier: F5:34:3A:39:C6:90:E0:2F:E3:92:A7:D2:0D:18:C7:48:E6:48:9F:DA X509v3 Authority Key Identifier: keyid:D6:60:98:E7:6E:7C:73:9A:38:62:09:EC:C7:5D:62:15:89:AA:B2:8E DirName:/CN=Easy-RSA CA serial:CB:8A:25:7F:5A:8A:A9:BD:63:D2:BE:B7:6C:5E:3E:75 X509v3 Key Usage: Digital Signature X509v3 Extended Key Usage: TLS Web Client Authentication
但是你也有这些键使用的价值,所以你的configuration应该工作…但没有中间CA …
你有没有试图将-ca设置为根CA证书,并将set -extra-certs设置为中间CA,并将-cert设置为server cert以形成一个完整的链。 别忘了 – 关键 。
其实我有它的工作:
服务器:
Tue Jun 21 04:39:49 2016 VERIFY OK: depth=2, CN=Easy-RSA CA Tue Jun 21 04:39:49 2016 VERIFY OK: depth=1, O=Easy-RSA CA2, CN=Easy-RSA CA2 Tue Jun 21 04:39:49 2016 VERIFY OK: depth=0, O=client, CN=client
客户:
Tue Jun 21 04:39:49 2016 VERIFY OK: depth=2, CN=Easy-RSA CA Tue Jun 21 04:39:49 2016 VERIFY OK: depth=1, O=Easy-RSA CA2, CN=Easy-RSA CA2 Tue Jun 21 04:39:49 2016 VERIFY OK: depth=0, O=server, CN=server
服务器conf:
port 1194 proto tcp-server dev tun ca ca1.crt extra-certs ca2.crt cert server.crt key server-key.pem dh dh.pem tls-server tls-auth ta.key 0
客户端conf:
client remote localhost 1194 port 1194 proto tcp-client dev tun ca ca1.crt extra-certs ca2.crt cert client.crt key client-key.pem dh dh.pem tls-client tls-auth ta.key 1