web-dev-qa-db-ja.com

opensslの無効なCA証明書

PKIインフラストラクチャでサーバー間OpenVPNを設定していますが、機能させることができません。証明書チェーンに何かあるのではないかと思いますが、その方法を説明するのに途方に暮れています。オフラインのルートCAと証明書の階層があります。 CAは、EJBCAと呼ばれる製品によって外部で管理されます。絵画的にはチェーンは次のようになります(名前が変更されています)。

RootCA -> OnlineSubCA -> SubCA1 -> VPNCA

CA VPNCAを使用してサーバーとクライアントの証明書に署名し、それらのシステムに証明書チェーンを用意しました。 OpenVPNをデバッグしているときに、「openssl s_server」と「s_client」を使用してみたところ、CAチェーンであると私は確信しました。

openssl s_server -cert server.cert -key server.key -CAfile chained.pem -verify 5

そしてクライアント上で

openssl s_client -cert client.cert -key client.key -CAfile chained.pem -verify 5

サーバーは、とりわけ、吐き出します。

depth=3 C = CA, O = My Company, CN = OnlineSubCA
verify error:num=24:invalid CA certificate
verify return:1
depth=3 C = CA, O = My Company, CN = OnlineSubCA
verify error:num=26:unsupported certificate purpose
verify return:1
depth=4 C = CA, O = My Company, CN = RootCA, emailAddress = [email protected]
verify return:1
depth=3 C = CA, O = My Company, CN = OnlineSubCA
verify return:1
depth=2 CN = SubCA1, O = My Company, C = CA
verify return:1
depth=1 CN = VPNCA
verify return:1
depth=0 C = CA, ST = , L = , O = My Company, OU = , CN = client1.mycompany.com, emailAddress = [email protected]
verify return:1

そして、これがどのようにまたはなぜそうであるかを説明するのに完全に途方に暮れています。 OpenVPNもクライアントから同様のエラーで失敗します:

VERIFY ERROR: depth=3, error=invalid CA certificate: /C=CA/O=My_Company/CN=OnlineSubCA

Ubuntu 12.04でOpenVPN 2.2.1とOpenSSL 1.0.1を実行しています。時間は両方で同期しています。

これ以上先に進む方法に困っています。どんなアイデア/提案でも大歓迎です。

8
Michael Hart

これは、X509v3拡張機能の問題です。最新の証明書は、そのタイプの証明書の承認された使用法を示す方法で署名されています。これらは、証明書をopenssl x509 -textにパイプするか、-inでファイルパスを指定することで表示できます。

あなたの場合、これらのエラーメッセージは、指定している証明書がCA証明書ではないことを示しています。 (最大のヒントは「サポートされていない証明書の目的」です)上記のコマンドを使用して、証明書のテキスト情報を表示します。有効なCA証明書は次のようになります。

        X509v3 Basic Constraints:
            CA:TRUE

非CA証明書は代わりにこれを表示します:

        X509v3 Basic Constraints:
            CA:FALSE

ファイルをごちゃごちゃにした可能性がありますが、ファイルを移動する場合はかなり簡単です。 openssl x509は、実際の証明書の内容を拡大鏡で照らします。

16
Andrew B