
Windows 10이 설치된 PC에서는 OpenSSL을 사용해야 합니다. 버전 1.0.2n을 다운로드하고 이 가이드를 따랐습니다.여러 호스트 이름으로 SSL 인증서 만들기openssl.cfg 구성 파일(C:\OpenSSL-Win64\bin에 있음)을 수정했습니다.
몇 가지 테스트를 거친 후 키와 인증서를 모두 문제 없이 생성할 수 있습니다.
내 문제는 다음과 같습니다. 인증서 생성에 대한 내 표시는주체 대체 이름값은 1개만 있어야 하며 다음과 일치해야 합니다.일반 이름필드. 따라서 (인증서 작성) commonName 필드를 다음으로 채웁니다.example.com, 주체 대체 이름도 다음과 같아야 합니다.example.com. cfg 파일을 변경할 때마다 v3-req 섹션에서 SAN 값을 수동으로 설정할 수 있다는 것을 알고 있지만 이를 피하고 싶습니다. SAN 필드의 일반 이름에 대해 묻는 값을 복사하는 방법을 찾고 있습니다.
그래서 저는 이것을 시도했습니다. openss.cfg 파일에서 v3 req 섹션으로 이동하여 다음과 같이 변경했습니다.
[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = commonName:copy
즉, :copy 기능을 이용하려고 시도했지만 불행하게도 이 작업은 작동하지 않습니다. 인증서 생성 후 명령을 실행하면
req -text -noout -in <filename.csr>
내 인증서를 확인하기 위해 특정 섹션에서 다음을 얻습니다.
X509v3 Subject Alternative Name:
DNS:commonName.copy
보시다시피 출력은 섹션 아래 내 선언의 오른쪽에 있습니다 [alt_names]
.
따라서 질문은 다음과 같습니다. commonName을 주체 대체 이름으로 상속하는 방법이 있습니까? 그렇다면 어떻게?
답변1
이전에 정의된 변수를 읽는 데 사용됩니다 ${section::name}
.
작동하는 예는 다음과 같습니다.
[ req ]
prompt = no
string_mask = default
# The size of the keys in bits:
default_bits = 2048
distinguished_name = req_dn
req_extensions = req_ext
[ req_dn ]
# Or traditional org style:
countryName = gb
organizationName = example
commonName = acme.example.test
[ req_ext ]
subjectAltName = @alt_names
[alt_names]
DNS.1 = ${req_dn::commonName}
DNS.2 = alt.example.test
다음은 다음과 같습니다.
openssl req -nodes -new -keyout test.key -out test.csr -config ./openssl.cnf
그 결과는 다음과 같습니다.
openssl req -noout -text -in test.csr
기부:
...
Attributes:
Requested Extensions:
X509v3 Subject Alternative Name:
DNS:acme.example.test, DNS:alt.example.test
Signature Algorithm: sha256WithRSAEncryption
92:1c:e0:0e:6d:7d:2e:b4:64:c5:ab:ff:6a:37:dd:35:98:58:
...