OpenSSL을 사용하여 SubjectAltName으로 자체 서명 된 인증서를 생성하려면 어떻게해야합니까? [닫은]


115

SubjectAltName이 포함 된 OpenSSL을 사용하여 자체 서명 된 인증서를 생성하려고합니다. 인증서에 대한 CSR을 생성하는 동안 OpenSSL x509의 v3 확장을 사용해야합니다. 나는 사용하고 있습니다 :

openssl req -new -x509 -v3 -key private.key -out certificate.pem -days 730

누군가 정확한 구문으로 나를 도울 수 있습니까?


2
또한 openssl을 사용하여 자체 서명 된 인증서를 만드는 방법을 참조하십시오 . 주체 대체 이름으로 인증서를 생성하기위한 정보를 제공하고 인증서가 브라우저 및 기타 사용자 에이전트에서 성공할 가능성이 가장 높도록 적용되는 다른 규칙을 알려줍니다.
jww

이 스레드 (하단에 답 stackoverflow.com/questions/27294589/... )를 사용하여 certificatetools.com을 당신에게 좋은 결과 및 사용 가능한 CNF 파일을 줄 것이다
제임스 넬슨

답변:


164

누군가 정확한 구문으로 나를 도울 수 있습니까?

3 단계 프로세스이며 openssl.cnf파일 수정이 포함 됩니다. 명령 줄 옵션으로 만 수행 할 수 있지만 저는 그렇게하지 않습니다.

openssl.cnf파일을 찾으십시오 . 다음 위치에있을 가능성이 높습니다 /usr/lib/ssl/openssl.cnf.

$ find /usr/lib -name openssl.cnf
/usr/lib/openssl.cnf
/usr/lib/openssh/openssl.cnf
/usr/lib/ssl/openssl.cnf

데비안 시스템 /usr/lib/ssl/openssl.cnf에서 내장 openssl프로그램 이 사용 합니다. 최근 데비안 시스템에서는 다음 위치에 있습니다./etc/ssl/openssl.cnf

파일에 openssl.cnf가짜 XXX를 추가하고 openssl질식 여부를 확인 하여 사용중인 것을 확인할 수 있습니다 .


먼저 req매개 변수를 수정합니다 . 사용할 이름이 있는 alternate_names섹션을 추가하십시오 openssl.cnf. 기존 alternate_names섹션 이 없으므로 추가하는 위치는 중요하지 않습니다.

[ alternate_names ]

DNS.1        = example.com
DNS.2        = www.example.com
DNS.3        = mail.example.com
DNS.4        = ftp.example.com

다음으로 기존 [ v3_ca ] 섹션에 다음을 추가합니다 . 정확한 문자열 검색 [ v3_ca ]:

subjectAltName      = @alternate_names

keyUsage아래에서 다음으로 변경할 수 있습니다 [ v3_ca ].

keyUsage = digitalSignature, keyEncipherment

digitalSignaturekeyEncipherment서버 인증서 표준 요금입니다. 에 대해 걱정하지 마십시오 nonRepudiation. 변호사가되고 싶어하는 컴퓨터 과학 관계자 / 걸들이 생각한 쓸모없는 부분입니다. 법적인 세계에서는 의미가 없습니다.

결국 IETF ( RFC 5280 ), 브라우저 및 CA는 빠르고 느슨하게 실행되므로 제공하는 키 사용은 중요하지 않을 것입니다.


둘째, 서명 매개 변수를 수정합니다. CA_default섹션 아래에서이 줄을 찾습니다 .

# Extension copying option: use with caution.
# copy_extensions = copy

다음으로 변경하십시오.

# Extension copying option: use with caution.
copy_extensions = copy

이렇게하면 SAN이 인증서에 복사됩니다. DNS 이름을 복사하는 다른 방법은 손상되었습니다.


셋째, 자체 서명 된 인증서를 생성합니다.

$ openssl genrsa -out private.key 3072
$ openssl req -new -x509 -key private.key -sha256 -out certificate.pem -days 730
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
...

마지막으로 인증서를 검토합니다.

$ openssl x509 -in certificate.pem -text -noout
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 9647297427330319047 (0x85e215e5869042c7)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=US, ST=MD, L=Baltimore, O=Test CA, Limited, CN=Test CA/emailAddress=test@example.com
        Validity
            Not Before: Feb  1 05:23:05 2014 GMT
            Not After : Feb  1 05:23:05 2016 GMT
        Subject: C=US, ST=MD, L=Baltimore, O=Test CA, Limited, CN=Test CA/emailAddress=test@example.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (3072 bit)
                Modulus:
                    00:e2:e9:0e:9a:b8:52:d4:91:cf:ed:33:53:8e:35:
                    ...
                    d6:7d:ed:67:44:c3:65:38:5d:6c:94:e5:98:ab:8c:
                    72:1c:45:92:2c:88:a9:be:0b:f9
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                34:66:39:7C:EC:8B:70:80:9E:6F:95:89:DB:B5:B9:B8:D8:F8:AF:A4
            X509v3 Authority Key Identifier:
                keyid:34:66:39:7C:EC:8B:70:80:9E:6F:95:89:DB:B5:B9:B8:D8:F8:AF:A4

            X509v3 Basic Constraints: critical
                CA:FALSE
            X509v3 Key Usage:
                Digital Signature, Non Repudiation, Key Encipherment, Certificate Sign
            X509v3 Subject Alternative Name:
                DNS:example.com, DNS:www.example.com, DNS:mail.example.com, DNS:ftp.example.com
    Signature Algorithm: sha256WithRSAEncryption
         3b:28:fc:e3:b5:43:5a:d2:a0:b8:01:9b:fa:26:47:8e:5c:b7:
         ...
         71:21:b9:1f:fa:30:19:8b:be:d2:19:5a:84:6c:81:82:95:ef:
         8b:0a:bd:65:03:d1

7
방금 openssl 파일을 복사하고 로컬로 조정했습니다. : 그 다음에 모든 것을 생성 openssl genrsa -out cert.key 3072 -nodes openssl req -new -x509 -key cert.key -sha256 -config openssl.cnf -out cert.crt -days 730 -subj "/C=US/ST=private/L=province/O=city/CN=hostname.example.com"
stwienert

7
이보다 유연한 사용 환경 변수를 설명 할 수있는 좋은 트릭도있다 여기 : subjectAltName=$ENV::ALTNAME(그리고 ENV VAR 설정은. ALTNAME=DNS:example.com,DNS:other.example.net).
Bruno

6
IP 주소로 작업하는 경우 for IP대신 사용 합니다. 구성 파일을 로컬로 복사 한 다음 . 그리고 주석을 제거해야 할 수도 있습니다 . DNSalternate_names-config my_config.cnfreq_extensions = v3_req
Adversus

5
나는 OSX에 일이있어,하지만이 링크에서 req.conf 템플릿을 사용하여 마법처럼 일을 결코 : support.citrix.com/article/CTX135602은 (내가 대답에 세부 사항을 추출 싶지만이 질문은 unhelpfully 닫힌 )
rymo

3
어떤 이유로 v3_ca 섹션의 subjectAltName = @alternate_names를 좋아하지 않습니다. 오타일까요? 다음은 오류입니다. error : 22097069 : X509 V3 루틴 : DO_EXT_NCONF : 잘못된 확장 문자열 : v3_conf.c : 139 : name = subjectAltName, section = @ alternate_names 140487468840608 : error : 22098080 : X509 V3 루틴 : X509V3_EXT_nconf : 확장 오류 : v3_conf.c : 93 : name = subjectAltName, value = @ alternate_names
James Nelson
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.