FIPS 모드가 활성화되면 FIPS 모드가 비활성화된 경우 OpenSSL에서 생성된 개인 키를 사용할 수 있습니까?

FIPS 모드가 활성화되면 FIPS 모드가 비활성화된 경우 OpenSSL에서 생성된 개인 키를 사용할 수 있습니까?

FIPS 모드가 비활성화된 상태에서 실행하고 FIPS 모드가 활성화된 상태에서 해당 키를 사용하려고 하면 OpenSSL에서 생성된 키 사이에 비호환성이 발생합니다.

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

genrsaOpenSSL의 '전통적인' 형식(PEM 레이블이 RSA PRIVATE KEY있고 헤더 Proc-TypeDEK-Info. 이는 EVP_BytesToKeyFIPS 승인이 아닌 MD5를 기반으로 하는 OpenSSL(실제로는 SSLeay)의 비표준 키 파생( )을 사용합니다 . (또한 매우 안전하지는 않지만 다른 질문이며 이미 여러 번 질문하거나 답변했습니다. 아마도 여기보다 security.SX에 더 많은 내용이 있을 것입니다.)

당신은 할 수 있습니다생성하다'new'(~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

이들 중 하나는 기본 HMAC-SHA1과 함께 PBES2 및 PBKDF2를 사용하며 이는 FIPS에 적합합니다. (기술적으로 pkey1.0.0 이전에는 사용할 수 없었지만 기억나지 않는 FIPS 버전 0.9.x가 있었다면 만료되었을 것입니다. 그리고 오늘은 도움이 되는 것이 아니라 AIUI 3.0.0입니다. 마침내 약 한 달 전에 베타를 시작했으며 모든 추가 단계가 필요하지 않은 일반 빌드에서 FIPS를 갖게 됩니다.)

참고로 default_mdin은 [req]CSR(또는 -x509자체 서명된 인증서) 의 서명을 위한 것이며 [CA_default]마찬가지로 인증서의 서명을 위한 것입니다 ca. 예를 들어 RSAwithSHA256과 RSAwithSHA1을 얻습니다. 이는 키 파일과 아무 관련이 없으며 req키를 생성할 수만 있고 생성할 수도 ca없습니다.

관련 정보