키에 대한 암호 프롬프트와 DN 정보에 대한 프롬프트를 피하십시오


90

다음 코드를 사용하여 키를 생성하고 있습니다.

apt-get -qq -y install openssl;
mkdir -p /etc/apache2/ssl;
openssl genrsa -des3 -out server.key 1024;
openssl req -new -key server.key -out server.csr;
cp server.key server.key.org;
openssl rsa -in server.key.org -out server.key;
openssl x509 -req -days 12000 -in server.csr -signkey server.key -out server.crt;
mv server.crt  /etc/apache2/ssl/cert.pem;
mv server.key  /etc/apache2/ssl/cert.key;
rm -f server.key.orig;
rm -f server.csr

두 가지 질문이 있습니다.

  1. 암호문을 건너 뛰려면 어떻게해야합니까? 그렇게하는 것이 합리적으로 안전한가요? (누구든지 인증서를 해킹 할 수 있어야하는 것처럼 어리석지 않아야합니다)

  2. 국가 이름, 조직 등을 묻는 메시지를 피하는 방법은 무엇입니까? 명령 프롬프트에서 해당 내용을 제공 할 수 있기를 바랍니다 (Man 페이지에는 OpenSSL에 대한 최상위 옵션 만 표시됨)

답변:


150

편집 : 이것은 지금까지 가장 인기있는 답변이며, 몇 년 전부터 ECDSA 변형을 추가했습니다. ECDSA를 사용할 수 있다면해야합니다.


명령 행에서 해당 정보를 모두 제공 할 수 있습니다.

한 단계 자체 서명 된 암호없는 인증서 생성 :

RSA 버전

openssl req \
    -new \
    -newkey rsa:4096 \
    -days 365 \
    -nodes \
    -x509 \
    -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" \
    -keyout www.example.com.key \
    -out www.example.com.cert

ECDSA 버전

openssl req \
    -new \
    -newkey ec \
    -pkeyopt ec_paramgen_curve:prime256v1 \
    -days 365 \
    -nodes \
    -x509 \
    -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" \
    -keyout www.example.com.key \
    -out www.example.com.cert

모든 openssl 부속 명령에는 자체 매뉴얼 페이지가 있습니다. 참조하십시오 man req.


구체적으로 질문을 해결하고 어떤 옵션이 적용되는지 정확하게 명시하십시오.

  1. -nodes플래그 신호 따라서 암호가 필요하지 않습니다 키를 암호화 할 수 있습니다. -passout arg플래그를 사용할 수도 있습니다 . 인수 형식을 지정하는 방법 PASS PHRASE ARGUMENTSopenssl(1)매뉴얼 페이지를 참조하십시오 .

  2. 은 Using -subj플래그 피사체를 지정할 수 있습니다 (예를하는 것은 위이다).


3
"-subj"를 통해 물건을 읽는 것은 OPENSSL_CONF가 설정되지 않은 경우에만 효과적입니다. IOW : OPENSSL_CONF가 설정되면 OpenSSL은 거기서 읽기를 시도 하고 "-subj"명령 행 인수를 무시 합니다. 알아내는 데 시간이 걸렸습니다.
oberstet

oberstet : 그렇습니다.
bahamat

stdin에서 주제 자체 를 전달할 수 있습니까? "-key stdin", "-key fd : 1"및 "-key-"..을 (를) 운이없이 사용해 보았습니다.
oberstet

1
@JeremyBaker : 아니요,이를 위해서는 2 단계 프로세스가 필요합니다. 를 생략 -x509하고 -days다음 CSR 대신 인증서를 생성 평소 CA 서명 방법을 사용하십시오.
bahamat

1
@jww-그리고 그 시간이왔다. Chrome v58부터 보안 페이지를로드하려고하지만 인증서에 일치하는 subjectAltName이 포함되어 있지 않으면 "NET :: ERR_CERT_COMMON_NAME_INVALID"오류 메시지와 함께 개인 정보 보호 오류 페이지가 표시됩니다. 고급 버튼을 클릭하면 메시지 "... 보안 인증서가 [missing_subjectAltName]에서이다"보여줍니다
불면증 소프트웨어

11

하지 않습니다 -passin옵션은 당신을 위해 트릭을 할?

file:pathname양식을 사용하면 해당 파일에 대한 권한 600으로 매우 안전 할 수 있습니다.


맨 페이지에서 옵션을 보았습니다. 묻지 않고 암호 문구를 사용할 수있는 것 같습니다. 감사!

그리고 -passin 'pass:YOUR_PASSWORD'?
-doc

5

허용되는 답변에는 몇 가지 작은 수정이 필요합니다. EC 라인 :

-newkey ec
-pkeyopt ec_paramgen_curve:prime256v1

해야한다:

 -newkey ec \
 -pkeyopt ec_paramgen_curve:prime256v1 \

MacOS-brew를 통해 설치된 OpenSSL 1.0.2f에서 아래 설명과 같이 허용되는 답변을 확인했습니다.

  • 사용 가능한 타원 곡선을 나열하려면

    $ openssl ecparam -list_curves
    
  • 키 파일을 생성하려면 다음을 수행하십시오.

    $ openssl ecparam -name secp256k1 -out secp256k1.pem
    
  • 비밀번호 프롬프트없이 인증서를 생성하려면 다음을 수행하십시오.

    openssl req \
        -new \
        -newkey ec:secp256k1.pem \
        -days 365 \
        -nodes \
        -x509 \
        -subj "/C=US/ST=FL/L=Ocala/O=Home/CN=example.com" \
        -keyout server.key \
        -out server.crt
    
  • 인증서를 보려면

    $ openssl x509 -noout -text -in server.crt
    

이것이 허용되는 답변과 어떻게 다릅니 까?
Ramhound

1
유일한 중요한 차이점은 pem 파일 생성 단계를 명시 적으로 나열한다는 것입니다. 허용 된 답변에 \ 문자가 누락되어 명령이 잘못되었다고 생각했습니다.
Andrei Sura 2016 년

1
그 사실을 언급하고 싶을 수도 있습니다. 수락 된 답변이 실제로 불완전하고 문자가 누락 된 경우 차이점을 강조하고 답변에 중요한 중요한 정보가 어떻게 포함되어 있는지 강조해야합니다.
Ramhound

3

다음 명령을 시도하십시오 :

openssl genrsa -des3 -out user.key -passout pass:foo 1024

건너 뛰는 부분은 다음과 같습니다 -passout pass:foo.


2

@bahamat는 훌륭한 답변을 제공합니다. 불행하게도 하나의 명령으로 ECDSA 인증서를 만들려고 할 때 일부 버전의 openssl에서 오류가 발생합니다. 오류는 다음과 같습니다.

routines:EVP_PKEY_CTX_ctrl:invalid operation:pmeth_lib.c:404

에 사용 openssl 1.0.1e-fips하고 CentOS 7있었습니다.

다음 3 가지 명령으로 인증서를 작성하면 효과가있는 것 같습니다.

openssl ecparam -genkey -name prime256v1 -out key.pem
openssl req -new -key key.pem -out csr.pem -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com"
openssl req -x509 -days 365 -key key.pem -in csr.pem -out certificate.pem

마지막 줄은 server.crt?로 끝나지 않아야 합니까?
ᴠɪɴᴄᴇɴᴛ
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.