openssl에서 -nodes 인수의 목적은 무엇입니까?


103

-nodesopenssl 에서 인수 의 목적은 무엇입니까 ?


2
Stack Overflow는 프로그래밍 및 개발 질문을위한 사이트입니다. 이 질문은 프로그래밍이나 개발에 관한 것이 아니기 때문에 주제에서 벗어난 것처럼 보입니다. 도움말 센터에서 내가 질문 할 수있는 주제를 참조 하세요 . 아마 슈퍼 사용자 또는 유닉스 및 리눅스 스택 교환 물어 더 나은 장소가 될 것입니다.
jww

20
@jww 동의하지 않습니다. openssl은 저수준 툴킷이며 개발자는 항상이를 처리해야합니다. 라인은 상당히 모호하며 단순히 C lib가 아닌 CLI이기 때문에 여기서 openssl 질문을 허용하지 않는 것은 큰 손실이 될 것입니다.
gtd

@gtd-내가 이것들을 신고 할 때 자주 불평합니다. Dev Ops에 대한 질문을 어디에 게시합니까? 도 참조하십시오 . . (하지만 제가이 질문에 실수를했다고 생각합니다. 질문은 2011 년의 질문이고 그 당시에는 주제에 관한 것이라고 생각합니다. 정책 변경에 대한 벌칙을 받고 싶지 않습니다.)
jww

2
@gtd-re : "openssl은 저수준 툴킷이며 개발자는 항상이를 처리해야합니다." -이것이 바로 슈퍼 유저 또는 Unix 및 Linux Stack Exchange 의 목적입니다. "... openssl 질문을 허용하지 않으면 큰 손실이 될 것입니다 ..." -openssl C 프로그래밍 질문은 항상 여기에서 환영합니다. Stack Overflow는 프로그래밍 및 개발 사이트이기 때문에 비 프로그래밍 질문의 손실을 놓치지 않습니다. 명령을 사용하는 방법을 모를 때 가야 할 다른 사이트가 있습니다.
jww

링크 주셔서 감사합니다. 매우 중요한 문제라고 생각하므로 답변을 게시하겠습니다.
gtd

답변:


123

옵션 -nodes은 영어 단어 "nodes"가 아니라 "no DES"입니다. 인수로 주어지면 OpenSSL이 PKCS # 12 파일 의 개인 키를 암호화하지 않음을 의미 합니다.

개인 키를 암호화하려면 생략 할 수 -nodes있으며 키는 3DES-CBC로 암호화됩니다. 키를 암호화하기 위해 OpenSSL은 암호를 입력하라는 메시지를 표시하고 해당 암호를 사용하여 키 파생 함수 EVP_BytesToKey를 사용하여 암호화 키를 생성합니다 .

OpenSSL 버전 및 컴파일 된 옵션에 따라 다음 대신 다음 옵션을 제공 할 있습니다 -nodes.

-des          encrypt private keys with DES
-des3         encrypt private keys with triple DES (default)
-idea         encrypt private keys with idea
-seed         encrypt private keys with seed
-aes128, -aes192, -aes256
              encrypt PEM output with cbc aes
-camellia128, -camellia192, -camellia256
              encrypt PEM output with cbc camellia

궁극적으로 라이브러리 수준에서 OpenSSL은 선택한 암호화 알고리즘 (또는 그 결여)을 사용하여 PEM_write_bio_PrivateKey 함수를 호출 합니다.


1
암호화 란 암호를 의미합니까?
Flimm 2013

4
@Flimm : 네, 비밀번호로 보호됩니다. 암호는 키 파생 알고리즘을 사용하여 암호화 키를 생성하며 암호화는 암호가 아닌 키로 수행됩니다. 암호화 된 키를 사용하는 유일한 방법은 먼저 암호를 해독하는 것입니다. 동일한 키를 생성하려면 암호화 된 암호를 알아야합니다.
indiv

개인 키 파일을 암호화해야하는 이유는 무엇입니까? 그것들은 누구에게도 공개되지 않으므로 이름이됩니다. 아니면 내가 틀렸나 요?
phil294

1
@Blauhirn : 모든 파일을 암호화하는 것과 같은 이유로 개인 키 파일을 암호화합니다. 복사본을 얻은 사람이 파일을 읽거나 사용할 수 없도록하는 것입니다. 개인 키를 암호화해야하는지 여부는 키의 중요성과 위협 모델에 따라 다릅니다.
indiv

12

편집 : nginx v1.7.3은 컨텍스트의 encrypted-private.key 에서 각 암호를 시도하여 지정된 파일에서 암호를 읽는 ssl_password_file 지시문을 추가했습니다.

indiv는 -nodes인수가 OpenSSL이 UNencrypted private.key 를 생성한다는 것을 의미한다는 점에서 정확합니다 . 그렇지 않으면 encrypted-private.key 를 생성하라는 암호 프롬프트가 표시됩니다 . 참조 REQ , PKCS12 , CA.pl을

그러나 프로그래머 의 목적 은 다음과 같습니다.

  • HTTP 서버 (예 : Apache , Nginx )는 암호없이 encrypted-private.key 를 읽을 수 없습니다 →
    • 옵션 A-HTTP 서버가 시작될 때마다 encrypted-private.key에 대한 암호를 제공해야합니다.
    • 옵션 B는 - 지정 ssl_password_file file.keys;http { }또는 server { }컨텍스트. [ 심판 ]
    • 옵션 C- 암호화없이 private.key-nodes 를 만드는 데 사용

유용함 : private.key 잠금

  • { ssl-cert 그룹 에 HTTP 서버 추가 }
  • sudo chown root:ssl-cert private.key- ch가 앤지 자신 의 어 private.key을루트 사용자, SSL-CERT의 그룹
  • sudo chmod 640 private.key-private.key의 접근 권한 을 소유자 R / W, 그룹 R로 변경
  • 이제 HTTP 서버가 UNencrypted private.key 를 시작하고 읽을 수 있어야합니다.

옵션 A

더 강력한 보안, 그러나 서버가 다시 시작될 때 encrypted-private.key에 대한 암호수동으로 입력해야합니다.

옵션 B

중간 수준의 보안, 아마 A / C 간의 좋은 균형

옵션 C

보안이 약하지만 암호화되지 않은 private.key 암호 를 요구하지 않습니다.



1
Nginx 버전 1.7.3부터 암호화 된 개인 키를 읽을 수 있습니다 . 참조 : nginx.org/en/docs/http/…
5lava

2
nginx와 그 버전을 토론에 도입하는 목적은 무엇입니까? 또한 (B)와 (C)는 동등한 보안 (즉, 파일 시스템 ACL)을 제공합니다. 설명하는 문제는 무인 키 저장소 문제 이며 해결 방법이없는 문제입니다. Gutmann의 Engineering Security 책을 참조하십시오 .
jww

@jww 질문은 " 목적 은 무엇입니까 ..."라고 묻습니다 . 나는 질문의 맥락 (프로그래머를위한 QnA)을 고려했고, "그러나 나는 (프로그래머를위한) 목적은 다음과 같다고 생각합니다."를 통해 표시하려고했습니다. 특히 보안 관련있다 .. 대한 논의 될 security.stackexchange.com
제이크 버거
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.