Проверка подписанного сообщения S / MIME с помощью OpenSSL без проверки назначения сертификата

Проблема:

Когда я подписываю сообщение сертификатом, который используется для веб-сервера HTTPS, OpenSSL не хочет проверять его снова.

Подписание сообщения:

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

Проверка сообщения:

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

Теперь я знаю, что мне следовало подписать свое сообщение, используя сертификат, который позволяет эту цель.

Но есть ли там каким-либо способом обойти эту проверку и проверить подпись?

Вот как были созданы CA и сертификат:

Создание CA:

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

Создание сертификата:

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

Определение расширения в openssl.cnf:

[ server ]
extendedKeyUsage       = serverAuth
keyUsage               = digitalSignature, keyEncipherment
...
1
задан 4 November 2015 в 11:43
1 ответ

Openssl smime в режиме проверки передает параметр -purpose вызову openssl verify. Следовательно, вы должны иметь возможность добавить -purpose sslserver и получить его для проверки. Я тестировал это на версии 1.0.2d, и она работала хорошо.

1
ответ дан 3 December 2019 в 23:57

Теги

Похожие вопросы