我在停用 FIPS 模式的情況下運行時遇到 OpenSSL 產生的金鑰之間不相容的問題,並嘗試在啟用 FIPS 模式的情況下使用這些金鑰。
OpenSSL 版本 = OpenSSL 1.0.1e-fips 2013 年 2 月 11 日
用於建立密鑰的命令(禁用 FIPS 模式):
openssl genrsa -rand <path to rand file> -aes256 -passout file:<path to password file> -out <path to output .key.pem file> 4096
嘗試使用密鑰的命令(已啟用 FIPS 模式):
openssl ca -config <path to cnf file> -extensions v3_usr_cert -passin file:<path to password file> -batch -notext -in <path to CSR file> -out <path to output .cert.pem file>
cnf 檔案中的 'default_md' 設定為 SHA256(在 '[ CA_default ]' 和 '[ req ]' 部分)
cnf檔案中的'private_key'設定為上面產生的金鑰
我收到的錯誤是:
unable to load CA private key
139772432762696:error:060800A3:digital envelope routines:EVP_DigestInit_ex:disabled for fips:digest.c:251:
在停用 FIPS 和啟用 FIPS 時,是否應該採用不同的方式產生金鑰以使其相容?
我是否應該使用不同的方式使用金鑰來簽署請求?
答案1
genrsa
編寫 OpenSSL 的「傳統」格式—帶有 PEM 標籤RSA PRIVATE KEY
並添加標頭Proc-Type
和DEK-Info
.這使用EVP_BytesToKey
基於 MD5的 OpenSSL(實際上是 SSLeay 的)非標準金鑰派生 ( ),該金鑰未經 FIPS 批准。 (而且也不是很安全,但這是一個不同的問題,並且已經被問過或回答過很多次,可能比這裡更多地在 security.SX 上。)
你可以產生使用「新」(自~2000年起!)PKCS8格式的金鑰genpkey
(功能更強大,但因此有更多選項),或者您可以轉變舊格式
openssl pkey -in tradfile -passin whatever -aes256 -out pkcs8file -passout whatever
openssl pkcs8 -topk8 -in tradfile -passin whatever -v2 aes-256-cbc -out pkcs8file -passout whatever
其中任何一個都使用 PBES2 和(因此)具有預設 HMAC-SHA1 的 PBKDF2,這對於 FIPS 來說是可以的。 (從技術上講,pkey
1.0.0 之前不可用,但如果有0.9.x 的FIPS 版本(我不記得了),它一定已經過期了。並不是說它今天對您有幫助,而是AIUI 3.0. 0,它終於在大約一個月前開始測試版,將在正常建置中擁有 FIPS,不需要所有額外的步驟。
僅供參考default_md
,in[req]
是 CSR 上的簽章(或使用-x509
自簽章憑證),[CA_default]
類似地,in 是憑證上的簽章ca
-例如,您得到 RSAwithSHA256 與 RSAwithSHA1。它與任何密鑰檔案無關,甚至req
只能產生密鑰,ca
不能。