suc*_*rab 7 openvpn pki ssl-certificate
编辑:我真的很抱歉不得不说这个问题已经神奇地自我修复了,我不知道为什么。作为对其中一个答案的回应,我从 CA 链中删除了所有 EKU,但它不起作用。度假回来后,我一次创建了证书链1,即。RootCA->VPN然后RootCA->IntermediateCA->VPN,最后,RootCA->IntermediateCA->ServerCA->VPN它仍然有效!我不知道它为什么起作用,但我很兴奋。只是为了绝对确定是删除 EKU 解决了这个问题,我回去向链中的 CA 添加了随机 EKU,瞧,它仍然有效......这绝对令人愤怒,我向你道歉所有试图提供帮助的人。我发誓,在我不在的情况下,绝对没有其他任何改变,也没有人碰过任何东西。结束编辑
尝试将 OpenVPN 客户端(Android 或 Windows 7/10)连接到我的测试服务器时,我收到以下错误:
验证错误:深度=1,错误=不支持的证书用途:C=CA、ST=QC、L=Montreal、O=Company Inc、OU=PKI、CN=Server Certificate Authority
我在 OpenBSD 上运行 OpenVPN 2.3.7。我正在使用使用XCA创建的以下 PKI CA 层次结构:
RootCA -> IntermediateCA -> ServerCA
Run Code Online (Sandbox Code Playgroud)
我为我的 VPN 服务器创建了一个由我的 ServerCA 签名的证书。请注意 depth=1。这似乎不是最终 VPN Server 证书的问题。OpenVPN是抱怨发行的VPN服务器证书。甚至错误消息中的 CN 是 ServerCA 的 CN,而不是 vpn 服务器的 CN。
据我所知,除了签署证书之外,链中的 CA 没有任何其他目的。
这是 VPN 服务器的证书配置。请注意,旧的 Netscape 服务器扩展在那里,这是 OpenVPN 所要求的:
nsCertType=server, email
extendedKeyUsage=serverAuth, nsSGC, ipsecEndSystem, iKEIntermediate
keyUsage=digitalSignature, keyEncipherment, dataEncipherment, keyAgreement
authorityKeyIdentifier=keyid, issuer
subjectKeyIdentifier=hash
basicConstraints=CA:FALSE
Run Code Online (Sandbox Code Playgroud)
这是颁发 CA 的证书的配置:
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
Run Code Online (Sandbox Code Playgroud)
我尝试添加nsCertType=server到 ServerCA,但没有任何变化。
我还看到过无数论坛帖子,其中人们忘记添加 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
**:**:**:**:**:**:**:**
Run Code Online (Sandbox Code Playgroud)
这是发行人的证书:
$ 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
**:**:**:**:**:**:**:**
Run Code Online (Sandbox Code Playgroud)
嗯,OpenVPN 的 easyrsa 创建证书是这样的:
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
服务器:
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
Run Code Online (Sandbox Code Playgroud)
客户:
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
Run Code Online (Sandbox Code Playgroud)
但是你也有这些 Key Usage 值,所以你的配置应该可以工作......但是没有中间 CA......
您是否尝试将--ca设置为根 CA 证书并将--extra-certs设置为中间 CA 并将--cert设置为服务器证书以形成完整的链?也不要忘记--key。
其实我有它的工作:
服务器:
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
Run Code Online (Sandbox Code Playgroud)
客户:
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
Run Code Online (Sandbox Code Playgroud)
服务器配置:
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
Run Code Online (Sandbox Code Playgroud)
客户端配置:
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
Run Code Online (Sandbox Code Playgroud)
这是 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 使用自己的密钥的限制,而是对 EE 使用 CA下的证书的密钥的限制。这类似于策略(大部分)和 NameConstraint 向下传播的方式,并且与适用于 CA 本身的 KeyUsage不同。
这就是 OpenSSL 所实现的,因此使用 OpenSSL 的 OpenVPN 也是如此。在服务器链中的每个 CA 证书上,如果存在 EKU,则它必须包含 serverAuth 或 SGC。同样,具有 EKU 的客户端链中的每个 CA 证书都必须包含 clientAuth。
服务器上方的中间 CA 具有带 OCSPSign 的 EKU,但没有 serverAuth,因此被拒绝。
参考:crypto/x509/x509_vfy.c以及crypto/x509v3/v3_purp.copenssl-1.0.2h中
| 归档时间: |
|
| 查看次数: |
24980 次 |
| 最近记录: |