Openssl

在不檢查證書用途的情況下使用 OpenSSL 驗證 S/MIME 簽名消息

  • November 5, 2015

問題:

當我使用用於 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 版本上對此進行了測試,效果很好。

引用自:https://serverfault.com/questions/733794