Openssl
在不檢查證書用途的情況下使用 OpenSSL 驗證 S/MIME 簽名消息
問題:
當我使用用於 HTTPS 網路伺服器的證書籤署消息時,OpenSSL 不想對其進行驗證。
簽署消息:
迴聲“TestMessage” | openssl 微笑\ -符號 \ -inkey 伺服器-key.pem \ -簽名者伺服器-crt.pem \ -certfile 伺服器-crt.pem \ -noattr -nodetach \ -outform DER \ -out 簽名消息.dat
驗證消息:
openssl 微笑\ -核實 \ -在簽名消息.dat \ -通知DER \ -簽名者伺服器-crt.pem \ -CAfile ca-crt.pem \ 驗證失敗 34379118248:錯誤:21075075:PKCS7 常式:PKCS7_verify:證書驗證錯誤:/usr/src/secure/lib/libcrypto/../../../crypto/openssl/crypto/pkcs7/pk7_smime.c:342:Verify錯誤:不支持的證書用途
現在,我知道我應該使用允許該目的的證書籤署我的消息。
但是有什麼方法可以繞過該檢查並驗證簽名嗎?
以下是 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 = 數字簽名,keyEncipherment ...
在驗證模式下,Openssl smime 將
-purpose
選項傳遞給呼叫 openssl 驗證。因此,您應該能夠添加-purpose sslserver
並驗證它。我在 1.0.2d 版本上對此進行了測試,效果很好。