명령 줄에서 암호를 사용하여 openSSL 키를 생성하는 방법은 무엇입니까?


107

첫째-암호를 제공하지 않으면 어떻게됩니까? 일종의 의사 임의 문구가 사용됩니까? 난 그냥 평범한 해커들을 막을 수있는 "충분한"무언가를 찾고있다.

둘째-명령 줄에서 암호를 제공하여 명령 줄에서 키 쌍을 어떻게 생성합니까?


나는 마침내이 명령을 사용하여 작동하게되었고, 일반적으로 사용하기에 안전하지 않은 것으로 간주되는 exec ()를 사용하여 파일에 PassPhrase를 제공하는 것이 좋습니다. PHP가 내 PC에서만 실행될 것이라고 확신하므로이 위험을 감수 할 수 있습니다 (Windows를 실행하고 PS 명령이 없음).

openssl genrsa -aes128 -passout pass:foobar -out privkey.pem 2048
openssl rsa -in privkey.pem -passin pass:foobar -pubout -out privkey.pub

@caf 덕분에 많은 사람이 없었다면 이것이 불가능했을 것입니다.

단 한 가지 후회합니다. 아무리 Google을 사용해도 아무도 openssl_pkey_new()Windows에서 Xampp로 작업 할 수없는 것 같습니다 ( 키 쌍을 생성하는 적절한 방법).


4
openssl_pkey_new()키 쌍을 생성하는 "올바른"방법 인 이유는 무엇입니까?
Jake Berger

Windows에는 (일반적으로) ps없지만 Vista 이후에는wmic process get commandline
dave_thompson_085

답변:


210

암호를 사용하지 않으면 개인 키가 대칭 암호로 암호화되지 않고 완전히 보호되지 않은 상태로 출력됩니다.

다음과 같은 호출을 사용하여 명령 줄에 암호를 제공하여 키 쌍을 생성 할 수 있습니다 (이 경우 암호는 foobar).

openssl genrsa -aes128 -passout pass:foobar 3072

그러나 명령 줄 인수는 일반적으로 모든 프로세스에서 볼 수 있기 때문에 당시 컴퓨터에서 실행중인 다른 프로세스에서이 암호를 가져올 수 있습니다.

더 나은 대안은 파일 권한으로 보호되는 임시 파일에 암호를 쓰고 다음을 지정하는 것입니다.

openssl genrsa -aes128 -passout file:passphrase.txt 3072

또는 표준 입력에 암호를 제공하십시오.

openssl genrsa -aes128 -passout stdin 3072

file:옵션 또는 파일 설명자 와 함께 명명 된 파이프를 사용할 수도 있습니다 .


그런 다음 일치하는 공개 키를 얻으려면 을 사용하여 개인 키를 암호화하는 데 사용 된 openssl rsa것과 동일한 암호를 -passin매개 변수 와 함께 제공 해야합니다 .

openssl rsa -passin file:passphrase.txt -pubout

(이는 표준 입력에서 암호화 된 개인 키를 예상합니다. 대신를 사용하여 파일에서 읽을 수 있습니다 -in <file>.)


암호로 암호화 된 개인 키 쌍을 사용하여 파일에 3072 비트 개인 및 공개 키 쌍을 생성하는 예 foobar:

openssl genrsa -aes128 -passout pass:foobar -out privkey.pem 3072
openssl rsa -in privkey.pem -passin pass:foobar -pubout -out privkey.pub

+1 좋아요, 작동합니다! 고마워요, 조금만 더 도와 줄 수 있다면 답을 얻을 수 있습니다. 왜이게 효과가 없을까요? 하려면 openssl RSA -in privkey.pem -pubout -passout 통과 :는 foobar -out pubkey.pem
Mawg는 분석 재개 모니카 말한다

또는 다른 방법으로 말하면-명령에서 공개 키를 얻는 방법 (내와 약간 다름). 일치하는 쌍이 필요합니다. 이것은 "충분히 좋은"보안 일뿐입니다.
Mawg는 분석 재개 모니카 말한다

4
@Mawg : openssl명령이 제공된 개인 키에 해당하는 공개 키를 출력하고 있습니다. 공개 키는 암호화되지 않았으므로 (비밀이 아니므로) 사용 -passout이 의미가 없습니다. -passin첫 번째 단계에서 개인 키를 암호화하는 데 사용 된 암호를 제공 하기 위해 여기에서 사용할 수 있습니다. 나는 또한 대답에 무언가를 추가했습니다.
caf

@caf, 좋은 피드백에 감사드립니다 (다시 +1). 그러나 OpenSSL을 사용하기에는 너무 멍청합니다. 나는 파일에 키를 원하는데 어떤 이유로 openssl genrsa 2048 -aes128 -passout pass:foobar -out privkey.pem그렇게하지 않습니다. 두 가지 명령을 주시겠습니까? 하나는 파일에 개인 키를 생성하고, 하나는 파일에 공개 키를 생성하는 것입니까? 성가신 일이어서 미안하지만, 나는 그것을 가지고
놀았고

3
@Mawg : OpenSSL은 -out매개 변수가 뒤에 오는 경우 그것을 좋아하지 않습니다. 2048정말, 명령 줄에서 마지막으로해야합니다 (내 대답을 업데이트했습니다). 마지막 예를 참조하십시오. 이것이 당신이 원하는 것이라고 생각합니다. AES-128의 경우 이러한 문제에 대해 제가 신뢰하는 사람이 AES-256보다 권장합니다.
caf 2011

9

genrsa되었습니다 에 의해 대체genpkey 가 암호를 묻는 메시지가 표시됩니다 터미널에서 수동으로 실행할 때 및 :

openssl genpkey -aes-256-cbc -algorithm RSA -out /etc/ssl/private/key.pem -pkeyopt rsa_keygen_bits:4096

그러나 스크립트에서 실행할 때 명령은 암호를 요구하지 않으므로 암호가 프로세스로 표시되지 않도록하려면 shell스크립트 의 함수를 사용하십시오 .

get_passwd() {
    local passwd=
    echo -ne "Enter passwd for private key: ? "; read -s passwd
    openssl genpkey -aes-256-cbc -pass pass:$passwd -algorithm RSA -out $PRIV_KEY -pkeyopt rsa_keygen_bits:$PRIV_KEYSIZE
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.