openssl erro de autenticação do cliente: alerta tlsv1 desconhecido ca:… número de alerta SSL 48

7

Gerei um certificado usando o openssl e o coloco na máquina do cliente, mas quando tento conectar-me ao servidor usando esse certificado, erro mencionado na linha de assunto de volta do meu servidor.

Veja o que eu fiz.

1) Eu faço um teste de conexão usando o openssl para ver quais são os nomes aceitáveis da CA do certificado de cliente para o meu servidor, eu emito esse comando da minha máquina cliente para o meu servidor:

openssl s_client -connect myupload.mysite.net:443/cgi-bin/posupload.cgi -prexit

e parte do que eu recebo é a seguinte:

Acceptable client certificate CA names
/C=US/ST=Colorado/L=England/O=Inteliware/OU=Denver Office/CN=Tim Drake/[email protected]
/C=US/ST=Colorado/O=Inteliware/OU=Denver Office/CN=myupload.mysite.net/[email protected]

2) Aqui está o que está no arquivo de configuração do apache no servidor com relação à autenticação de cliente SSL:

SSLCACertificatePath /etc/apache2/certs

SSLVerifyClient require 
SSLVerifyDepth  10

3) Gerei um certificado de cliente auto-assinado chamado "client.pem" usando mypos.pem e mypos.key, então quando eu executo este comando:

openssl x509 -in client.pem -noout -issuer -subject -serial

aqui está o que é retornado:

issuer= /C=US/ST=Colorado/O=Inteliware/OU=Denver Office/CN=myupload.mysite.net/[email protected]
subject= /C=US/ST=Colorado/O=Inteliware/OU=Denver Office/CN=mlR::mlR/[email protected]
serial=0E

(note que mypos.pem está em / etc / apache2 / certs / e mypos.key está salvo em / etc / apache2 / certs / private /)

4) Eu coloquei client.pem na máquina cliente, e na máquina cliente, eu corro o seguinte comando:

openssl s_client -connect myupload.mysite.net:443/cgi-bin/posupload.cgi -status -cert client.pem

e eu recebo este erro:

CONNECTED(00000003)
OCSP response: no response sent
depth=1 /C=US/ST=Colorado/L=England/O=Inteliware/OU=Denver Office/CN=Tim Drake/[email protected]
verify error:num=19:self signed certificate in certificate chain
verify return:0
574:error:14094418:SSL routines:SSL3_READ_BYTES:tlsv1 alert unknown ca:/SourceCache/OpenSSL098/OpenSSL098-47/src/ssl/s3_pkt.c:1102:SSL alert number 48
574:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:/SourceCache/OpenSSL098/OpenSSL098-47/src/ssl/s23_lib.c:182:

Estou realmente perplexo com o que fiz de errado. Eu pesquisei um pouco sobre esse erro e o que eu descobri é que as pessoas estão dizendo que a CA de emissão do certificado do cliente não é confiável para o servidor, mas quando eu olho para o emissor do meu certificado de cliente, ele corresponde a um dos a CA aceita retornada pelo meu servidor.

Alguém pode ajudar, por favor?

Obrigado antecipadamente.

    
por JoJoeDad 29.11.2012 / 06:27

3 respostas

5

ok, eu finalmente descobri qual era o problema e gostaria de compartilhá-lo apenas no caso de alguém ficar preso com essa mensagem de erro também.

O arquivo de configuração do Apache tem as seguintes linhas quando fala sobre a CA:

    #   Set the CA certificate verification path where to find CA
    #   certificates for client authentication or alternatively one
    #   huge file containing all of them (file must be PEM encoded)
    #   Note: Inside SSLCACertificatePath you need hash symlinks
    #         to point to the certificate files. Use the provided
    #         Makefile to update the hash symlinks after changes.

Isso significa que todo arquivo de certificado neste diretório apontado por SSLCACertificatePath deve usar um link simbólico. E, mais importante, o nome de cada link simbólico deve ser o valor de hash do assunto de cada certificado. Você pode encontrar o valor de hash do certificado de CA executando este comando:

    openssl x509 -subject_hash -in *cacert.pem*

Portanto, se o valor de hash for 0434423b, no diretório apontado por SSLCACertificatePath, você deverá criar dois links simbólicos para apontar para o certificado no diretório:

0434423b -> /etc/apache2/certs/mypos.pem
0434423b.0 -> /etc/apache2/certs/mypos.pem

Isso deve resolver o problema. Claro, se eu tivesse usado o SSLCACertificateFile, não acho que tenha tido tantos problemas.

Eu encontrei a explicação do SSLCACertificatePath aqui:

página de comandos de verificação do openssl

procure no diretório -CApath

    
por 30.11.2012 / 03:52
1

Descobri que o comando "sudo update-ca-certificates --fresh" gera automaticamente links simbólicos do valor de hash do assunto de cada certificado para o certificado.

    
por 20.11.2013 / 04:45
0

Oi Você já tentou executar o seguinte comando,

openssl s_client -connect myupload.mysite.net:443/cgi-bin/posupload.cgi -status -cert client.pem -verify 1 -showcerts

Observe o verificar 1 . Ele diz ao SSL o quão profundo ele precisa ir, e acho que esse pode ser o problema que você está tendo em sua configuração do Apache. Tente definir a configuração do apache,

SSLVerifyDepth 1

Felicidades, Dexter

    
por 29.11.2012 / 06:36