web-dev-qa-db-ja.com

「サポートされていない目的」のopenvpnクライアント証明書エラー

私は このwikiの指示 に従ってOpenVPNクライアント証明書を生成していました。これには以下が含まれます。

easyrsa gen-req client1 nopass

OpenVPNセットアップでこのclient1証明書を使用しようとしました。サーバーログには次のログが表示されます(注:セキュリティ上の理由から、IPアドレスはパブリックIPから192.168.0.2に変更されました)。

192.168.0.2:5570 TLS: Initial packet from [AF_INET]192.168.0.2:5570, sid=1e71335b cc13ec8f
192.168.0.2:5570 VERIFY ERROR: depth=0, error=unsupported certificate purpose: CN=client1
192.168.0.2:5570 OpenSSL: error:1417C086:SSL routines:tls_process_client_certificate:certificate verify failed
192.168.0.2:5570 TLS_ERROR: BIO read tls_read_plaintext error
192.168.0.2:5570 TLS Error: TLS object -> incoming plaintext read error
192.168.0.2:5570 TLS Error: TLS handshake failed
192.168.0.2:5570 SIGUSR1[soft,tls-error] received, client-instance restarting

したがって、明確なエラーは次のようになります。

VERIFY ERROR: depth=0, error=unsupported certificate purpose: CN=client1

次のコマンドで証明書を確認しました。

openssl x509 -in client1.crt -text -noout -purpose

また、Certificate purposeセクションの出力は次のようになります。

Certificate purposes:
SSL client : No
SSL client CA : No
SSL server : Yes
SSL server CA : No
Netscape SSL server : Yes
Netscape SSL server CA : No
S/MIME signing : No
S/MIME signing CA : No
S/MIME encryption : No
S/MIME encryption CA : No
CRL signing : No
CRL signing CA : No
Any Purpose : Yes
Any Purpose CA : Yes
OCSP helper : Yes
OCSP helper CA : No
Time Stamp signing : No
Time Stamp signing CA : No

私の質問:

  1. クライアント証明書の何が問題になっていますか?
  2. 正しい証明書を生成するにはどうすればよいですか?
1
Koala Yeung

nsCertTypeを有効にする正しい方法は、easyrsa varsファイルを使用することです。

# Support deprecated "Netscape" extensions? (choices "yes" or "no".) The default
# is "no" to discourage use of deprecated extensions. If you require this
# feature to use with --ns-cert-type, set this to "yes" here. This support
# should be replaced with the more modern --remote-cert-tls feature.  If you do
# not use --ns-cert-type in your configs, it is safe (and recommended) to leave
# this defined to "no".  When set to "yes", server-signed certs get the
# nsCertType=server attribute, and also get any NS_COMMENT defined below in the
# nsComment field.

#set_var EASYRSA_NS_SUPPORT "no"
 set_var EASYRSA_NS_SUPPORT "yes"

結果の証明書には次の目的があります。

    X509v3 Extended Key Usage: 
        TLS Web Client Authentication
    X509v3 Key Usage: 
        Digital Signature
    Netscape Comment: 
        Easy-RSA Generated Certificate
    Netscape Cert Type: 
        SSL Client
1
dotvotdot

クライアント証明書の何が問題になっていますか?

生成された証明書はSSLクライアントオプションで構成されていないため、easy-rsa構成の何かは正しくありません。

正しい証明書を生成するにはどうすればよいですか?

easy-rsaツールを修正するか、opensslを直接使用することができます。 opensslでこれを行うには、CA署名者のキーにアクセスする必要があります。

openssl x509 -req -in <path to client csr> -CAkey <path to CA key> -CA <path to CA cert> -CAcreateserial -out client1.pem

これにより、CAによって署名された証明書(OpenVPNでの認証に必要)が作成され、SSLクライアントおよびSSLサーバーオプションの使用法も提供されます。

1
Andrew

easy-rsa (v3.0.3)のデフォルトのクライアント構成が問題の原因であることがわかります。ファイルのデフォルトのコンテンツ x509-types/client は次のとおりです。

# X509 extensions for a client

basicConstraints = CA:FALSE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer:always
extendedKeyUsage = clientAuth
keyUsage = digitalSignature

nsCertType定義はありません。これを修正するには、このファイルを(使用しているeasy-rsaコピーで)変更し、次の行を追加する必要があります。

nsCertType = client

次に、同じクライアント証明書生成コマンドがチャームとして機能します。

追伸確認する場所を教えてくれてありがとう @ lenniey ありがとう @ andrewopensslコマンドの代替案。

1
Koala Yeung