erro de certificado de cliente openvpn com “propósito não suportado”

1

Eu estava seguindo esta instrução wiki para gerar o certificado de cliente OpenVPN. Isso envolve:

easyrsa gen-req client1 nopass

Eu tentei usar este certificado client1 na minha configuração do OpenVPN. O log do servidor mostra os seguintes registros (nota: o endereço IP foi alterado de IP público para 192.168.0.2 por motivo de segurança):

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

Então, o erro claro deve ser este:

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

Eu verifiquei o certificado com este comando:

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

E a saída da seção Propósitos de certificados é semelhante a:

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

Minhas perguntas:

  1. O que há de errado com meu certificado de cliente?
  2. O que devo fazer para gerar o certificado correto?
por Koala Yeung 03.04.2018 / 05:11

3 respostas

1

A maneira correta de ativar nsCertType é através do arquivo 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"

O certificado resultante tem o seguinte objetivo:

    X509v3 Extended Key Usage: 
        TLS Web Client Authentication
    X509v3 Key Usage: 
        Digital Signature
    Netscape Comment: 
        Easy-RSA Generated Certificate
    Netscape Cert Type: 
        SSL Client
    
por 04.04.2018 / 13:39
1

Acontece que a configuração do cliente padrão de easy-rsa (v3.0.3) é a fonte de problema. O conteúdo padrão do arquivo x509-types/client é:

# X509 extensions for a client

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

Não há definição nsCertType . Para corrigir isso, você precisa alterar este arquivo (na cópia easy-rsa que você está usando) e adicionar esta linha:

nsCertType = client

Em seguida, o mesmo comando de geração de certificados de cliente funciona como um encanto.

P.S. Obrigado @lenniey por me dar a ideia de onde verificar. Obrigado @andrew para a alternativa de comando openssl .

    
por 04.04.2018 / 04:53
1

What is wrong with my client certificate?

Os certificados que foram gerados não estão configurados com a opção Cliente SSL, portanto, algo com a configuração easy-rsa não está correto.

What should I do to generate the correct certificate?

Você pode tentar corrigir a ferramenta easy-rsa ou usar openssl diretamente. Você precisará acessar a chave do assinante da CA para fazer isso com openssl .

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

Isso criará um certificado assinado pela CA (necessário para autenticação com o OpenVPN) e também deverá fornecer o uso para as opções Cliente SSL e Servidor SSL.

    
por 03.04.2018 / 16:46