Windows용 openssl.conf 생성

이 장에서는 Windows에서 처리할 수 있는 방법으로 openssl.conf 파일을 만드는 방법을 설명합니다.


기본 openssl.conf에서 변경할 부분:



기본openssl.conf을 생성하려면 Jamie의 놀라운article이 좋은 출발점이 될 것입니다.

원본 Windows 인증서와 Linux에서 OpenSSL을 사용하여 만든 인증서 사이에는 많은 차이점이 있습니다.

차이 1 → 발행자:



발급자는 인증서에서 가장 중요한 필드 중 하나입니다. Windows에서 직접 만든 인증서를 수락하려면 이를 올바르게 해석해야 합니다.

기본 openssl.conf로 생성된 인증서와 원본 Windows 인증서의 차이점:



차이점 1에 대한 솔루션:



이 부분에서는 req 명령에 대한 섹션을 정의합니다.

default_bits, default_md 부분을 편집할 수 있습니다. 그러나 가장 중요한 것은 req_distinguished_name 섹션을 편집하여 DN을 형성하는 방법을 변경할 수 있다는 것입니다.

기본 [ req ] 부분은 다음과 유사합니다.

[ req ]

default_bits = 2048
distinguished_name = req_distinguished_name
string_mask = utf8only
default_md = sha256
x509_extensions = v3_ca


해당 기본값 [ req_distinguished_name ] :

[ req_distinguished_name ]
# See <https://en.wikipedia.org/wiki/Certificate_signing_request>.
countryName                     = Country Name (2 letter code)
stateOrProvinceName             = State or Province Name
localityName                    = Locality Name
0.organizationName              = Organization Name
organizationalUnitName          = Organizational Unit Name
commonName                      = Common Name
emailAddress                    = Email Address


보시다시피 countryName, stateOrProvinceName, localityName과 같은 많은 필드가 있습니다.

이것이 바로 OpenSSL로 생성된 인증서의 'Issuer' 필드에 많은 정보가 표시되는 이유입니다.

편집된 [ req_distinguished_name ]은 다음과 유사해야 합니다.

[ req_distinguished_name ]

1.DC = com
0.DC = company
DC = subdomain
commonName = Common Name


그리고 사용자는 해당 순서대로 입력해야 합니다.


결과적으로 유효한 발급자를 성공적으로 생성했습니다.


차이점 2 → 누락된 필드:



"인증서 템플릿 이름"및 "CA 버전"의 두 필드는 Linux에서 OpenSSL로 생성된 인증서에서 사용할 수 없습니다.

손으로 만든 OpenSSL 인증서를 수락하도록 Windows를 속일 때 어떤 필드를 정확하게 검사하는지 알기는 어렵지만 인증서를 원본과 똑같이 보이게 하는 것이 좋은 방법이라고 생각합니다.



차이점 2에 대한 솔루션:



먼저 openssl.conf 파일 상단에서 OID를 정의합니다.

oid_section = OIDs

[ OIDs ]

certificateTemplateName = 1.3.6.1.4.1.311.20.2
caVersion = 1.3.6.1.4.1.311.21.1


We can skip the definition of the OID's and use the OID directly, of course. But defining them first and using them as variables would be a good practice.



둘째, [ reg ]에서 새 요구 사항을 생성합니다. v3_req라고 가정해 보겠습니다.

[ req ]

default_bits = 2048
distinguished_name = req_distinguished_name
string_mask = default
default_md = sha256
x509_extensions = v3_ca
req_extensions = v3_req


마지막으로 [ v3_req ]를 정의합니다.

[ v3_req ]

subjectKeyIdentifier = hash
basicConstraints = critical, CA:true
keyUsage = digitalSignature, cRLSign, keyCertSign
certificateTemplateName = ASN1:PRINTABLESTRING:CA
caVersion = ASN1:INTEGER:0


그런 다음 다음 매개 변수를 사용하여 인증서를 만들어야 합니다.

-extensions v3_req


그 결과 인증서 필드를 성공적으로 만들었습니다.


결정적인:



openssl.conf를 성공적으로 만들었습니다!
다음에서 전체 openssl.conf 파일을 볼 수 있습니다. GitHub Gist

좋은 웹페이지 즐겨찾기