Verificando a mensagem assinada S / MIME com o OpenSSL sem verificar a finalidade do certificado

1

O problema:

Quando assino uma mensagem com um certificado usado para um servidor da Web HTTPS, o OpenSSL não quer verificá-la novamente.

Assinando uma mensagem:

echo "TestMessage" | openssl smime \
    -sign \
    -inkey server-key.pem \
    -signer server-crt.pem \
    -certfile server-crt.pem \
    -noattr -nodetach \
    -outform DER \
    -out signedmessage.dat

Confirmando a mensagem:

openssl smime \
    -verify \
    -in signedmessage.dat \
    -inform DER \
    -signer server-crt.pem \
    -CAfile ca-crt.pem \
Verification failure
34379118248:error:21075075:PKCS7 routines:PKCS7_verify:certificate verify error:/usr/src/secure/lib/libcrypto/../../../crypto/openssl/crypto/pkcs7/pk7_smime.c:342:Verify error:unsupported certificate purpose

Agora, sei que deveria ter assinado minha mensagem usando um certificado que permite esse propósito.

Mas há alguma maneira de ignorar essa verificação e verificar a assinatura de qualquer maneira?

Veja como a CA e o certificado foram criados:

Criação de CA:

openssl req -x509 -new -newkey rsa:4096 -keyout ca-key.pem -out ca-crt.pem

Criação de certificado:

openssl req -new -newkey rsa:4096 -keyout server-key.pem -out server-csr.pem -nodes
openssl ca -config openssl.cnf -extensions server -cert ca-crt.pem -keyfile ca-key.pem -in server-csr.pem -out server-crt.pem

Definição de extensão em openssl.cnf:

[ server ]
extendedKeyUsage       = serverAuth
keyUsage               = digitalSignature, keyEncipherment
...
    
por ZeWaren 04.11.2015 / 10:43

1 resposta

1

O openssl smime, no modo de verificação, passa a opção -purpose para uma invocação do openssl verify. Consequentemente, você deve poder adicionar -purpose sslserver e validá-lo. Eu testei isso na versão 1.0.2d e funcionou bem.

    
por 06.11.2015 / 00:21