이 작업을 수행하는 방법에 대한 예를 제공하는 몇 가지 훌륭한 답변이 있지만 시도에서 문제가 발생한 부분을 설명하는 것은 없습니다. OpenSSL은 때때로 직관적이지 않을 수 있으므로 살펴볼 가치가 있습니다.
먼저 OpenSSL은 기본적으로 구성에서 제공하는 고유 이름 값을 무시합니다. 그것들을 사용하려면 구성에 추가해야합니다 prompt = no
. 또한 작성된 명령 은 인증서 자체가 아닌 인증서 요청 만 생성
하므로 -days
아무 것도 수행하지 않습니다.
이 명령을 사용하여 인증서 요청을 생성하고 결과를 검사 한 경우 주제 대체 이름이 있습니다.
$ openssl req -new -key server.key -out server.csr -config config.cnf -sha256
$ openssl req -text -noout -in server.csr
Certificate Request:
Data:
Version: 1 (0x0)
Subject: C = US, ST = Massachusetts, L = Boston, O = MyCompany
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
...
Exponent: 65537 (0x10001)
Attributes:
Requested Extensions:
X509v3 Subject Alternative Name:
DNS:dev.mycompany.com
Signature Algorithm: sha256WithRSAEncryption
...
그러나 heroku 링크의 명령을 사용하여 인증서를 생성하고 결과를 검사하면 주제 대체 이름이 누락됩니다.
$ openssl x509 -req -sha256 -days 365 -in server.csr -signkey server.key -out server.crt
$ openssl x509 -text -noout -in server.crt
Certificate:
Data:
Version: 1 (0x0)
Serial Number:
89:fd:75:26:43:08:04:61
Signature Algorithm: sha256WithRSAEncryption
Issuer: C = US, ST = Massachusetts, L = Boston, O = MyCompany
Validity
Not Before: Jan 21 04:27:21 2018 GMT
Not After : Jan 21 04:27:21 2019 GMT
Subject: C = US, ST = Massachusetts, L = Boston, O = MyCompany
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
...
Exponent: 65537 (0x10001)
Signature Algorithm: sha256WithRSAEncryption
...
기본적으로 OpenSSL은 확장을 요청에서 인증서로 복사하지 않기 때문입니다. 일반적으로 인증서는 고객의 요청에 따라 CA에서 작성 / 서명하며, 일부 확장은 요청에 정의 된 확장을 맹목적으로 신뢰하려는 경우 CA가 의도 한 것보다 더 많은 전원을 인증서에 부여 할 수 있습니다.
OpenSSL에 확장을 복사하도록 지시하는 방법이 있지만 IMHO는 인증서를 생성 할 때 구성 파일에 확장을 제공하는 것보다 더 효과적입니다.
기존 구성 파일을 사용하려고하면 최상위 레벨 섹션이 표시 [req]
되어 해당 설정이 x509 명령이 아닌 req 명령에만 적용 되기 때문에 작동 하지 않습니다. 최상위 섹션 마커가 필요하지 않으므로 첫 번째 줄만 제거하면 요청이나 인증서 생성 모두에 잘 작동합니다.
$ openssl x509 -req -sha256 -days 365 -in server.csr -signkey server.key -out server.crt -extfile config.cnf
또는 명령에 대한 -x509
인수를 사용하여 req
먼저 요청을 작성한 다음 인증서를 작성하지 않고 단일 명령으로 자체 서명 된 인증서를 생성 할 수 있습니다 . 이 경우 [req]
req 명령이 해당 섹션을 읽고 사용 하므로 섹션 라인 을 제거 할 필요가 없습니다
.
$ openssl req -x509 -sha256 -days 365 -key server.key -out server.crt -config config.cnf
요약하면, 위 명령에서 사용 된 수정 된 구성 파일은 다음과 같습니다.
default_bits = 2048
distinguished_name = dn
x509_extensions = san
req_extensions = san
extensions = san
prompt = no
[ dn ]
countryName = US
stateOrProvinceName = Massachusetts
localityName = Boston
organizationName = MyCompany
[ san ]
subjectAltName = DNS:dev.mycompany.com
-config <(cat /System/Library/OpenSSL/openssl.cnf ; printf '[SAN]\nsubjectAltName=DNS:dev.mycompany.com')