web-dev-qa-db-ja.com

OpenVPNが中間証明書に対して「サポートされていない証明書の目的」というエラーを表示するのはなぜですか?

編集:私は問題が魔法のようにそれ自体を修正したと言わざるをえなくて本当に申し訳ありません、そして私はなぜか分かりません。回答の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
         **:**:**:**:**:**:**:**
7

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

3

うーん、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

XCA

4
Dilyin

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サーバー認証

1
kevinM