Проверка подписанного сообщения S/MIME с помощью OpenSSL без проверки назначения сертификата
Эта проблема:
Когда я подписываю сообщение сертификатом, который используется для веб-сервера HTTPS, OpenSSL не хочет проверять его обратно.
Подписание сообщения:
эхо "TestMessage" | openssl smime \
-знак \
-inkey server-key.pem \
-signer server-crt.pem \
-certfile server-crt.pem \
-noattr -nodetach \
-оформ DER
-out signmessage.datПроверка сообщения:
openssl smime \
-верять \
-inignmessage.dat \
-информ DER \
-signer server-crt.pem \
-CAfile ca-crt.pem \
Ошибка проверки
34379118248: ошибка:21075075: процедуры PKCS7:PKCS7_verify: ошибка проверки сертификата:/usr/src/secure/lib/libcrypto/../../../crypto/openssl/crypto/pkcs7/pk7_smime.c:342: проверить ошибка: неподдерживаемое назначение сертификатаТеперь я знаю, что должен был подписать свое сообщение, используя сертификат, который позволяет это сделать.
Но есть ли способ обойти эту проверку и проверить подпись в любом случае?
Вот как были созданы 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:
[сервер] extendedKeyUsage = serverAuth keyUsage = digitalSignature, keyEncipherment ...
1 ответ
Решение
OpenSSL smime, в режиме проверки, передает -purpose Опция до вызова OpenSSL проверить. Следовательно, вы должны быть в состоянии добавить -purpose sslserver и сделать это проверить. Я проверил это на версии 1.0.2d, и она работала хорошо.