編集:私は問題が魔法のようにそれ自体を修正したと言わざるをえなくて本当に申し訳ありません、そして私はなぜか分かりません。回答の1つに応えて、CAチェーンからすべてのEKUを削除しましたが、機能しませんでした。休暇から戻った後、私は一度に1つずつ証明書チェーンを作成しました。 RootCA->VPN
、次にRootCA->IntermediateCA->VPN
そして最後に、 RootCA->IntermediateCA->ServerCA->VPN
、それでも動作しました!なぜ機能していたのかはわかりませんが、ワクワクしました。それを解決したのがEKUの削除であることを完全に確認するために、私は戻ってチェーンのCAにランダムなEKUを追加しました、そして、見たところ、それはまだ機能します...助けようとしたすべての人々。私が誓う、他に何も変わっていないし、誰も私の不在中に何かに触れたことはない。編集を終了
OpenVPNクライアント(AndroidまたはWindows 7/10)をテストサーバーに接続しようとすると、次のエラーが表示されます。
確認エラー:depth = 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
ServerCAによって署名されたVPNサーバーの証明書を作成しました。 深さ= 1に注意してください。これは、最終的なVPN Server証明書には問題がないようです。 OpenVPNは、VPNサーバー証明書の発行者について不平を言っています。エラーメッセージのCNでさえ、VPNサーバーのServerCAではありません。
私が判断できる限り、チェーン内のCAが証明書に署名する以外の目的を持つ必要はありません。
VPNサーバーの証明書の構成は次のとおりです。 OpenVPNが要求するように、古いNetscapeサーバー拡張が存在することに注意してください。
nsCertType=server, email
extendedKeyUsage=serverAuth, nsSGC, ipsecEndSystem, iKEIntermediate
keyUsage=digitalSignature, keyEncipherment, dataEncipherment, keyAgreement
authorityKeyIdentifier=keyid, issuer
subjectKeyIdentifier=hash
basicConstraints=CA:FALSE
発行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
追加してみました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
**:**:**:**:**:**:**:**
そしてここに発行者の証明書があります:
$ 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とともに1つのケースを許可します。
下位CA証明書が技術的に制約されていると見なされるには、証明書に、下位CA証明書が証明書の発行を許可されているすべての拡張キー使用法を指定する拡張キー使用法(EKU)拡張を含める必要があります。 anyExtendedKeyUsage KeyPurposeIdは、この拡張機能内に出現してはなりません(MUST NOT)。
したがって、EKUはCA自身のキーの使用を制限するものではなく、EEの証明書付きキーの使用nder CAに対する制限です。これは、ポリシー(主に)とNameConstraintsが下方に伝播する方法に似ており、doesが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.c
openssl-1.0.2h
うーん、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
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
しかし、これらのキー使用法の値もあるので、設定は機能しているはずです...しかし、中間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
クライアント:
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
サーバー設定:
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
クライアント設定:
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
Linuxでstunnelとopensslに同様の問題がありました
サーバー側では、すべてのクライアントおよびCA証明書に次のものが含まれることが期待されていることがわかりました。拡張キーの使用法:TLS Webクライアント認証
また、クライアント側では、すべてのサーバーおよびCA証明書に次のものが含まれることが期待されていることがわかりました。X509v3拡張キーの使用法:TLS Webサーバー認証
同じCAを使用してクライアント証明書とサーバー証明書の両方に署名していたので、CA、CA1、およびCA2証明書にclientAuthとserverAuthの両方を含めるように設定してテストし、問題を修正しました。
CA、CA1およびCA2:X509v3拡張キーの使用法:TLS Webクライアント認証、TLS Webサーバー認証
クライアント証明書:X509v3拡張キー使用法:TLS Webクライアント認証
サーバー証明書:X509v3拡張キー使用法:TLS Webサーバー認証