Apache2에 대한 다중 도메인 자체 서명 인증서를 작성하는 방법은 무엇입니까?


15

가상 호스트가 여러 개인 작은 웹 서버가 있습니다. SSL 연결이 설정된 후에 만 ​​서버가 요청한 가상 호스트를 발견하기 때문에 각 개별 가상 호스트에 인증서를 할당 할 수 없다는 것을 알고 있습니다. 그러나 여러 도메인을 나열하는 단일 SSL 인증서를 가질 수 있습니까? 또는 * .example.com과 같은 와일드 카드 도메인 이상이어야합니다. 그렇다면 자체 서명 된 인증서를 만들기 위해 어떤 Linux 명령을 작성해야합니까?

추가 : 명확히하기 위해-모든 가상 호스트에 대해 하나의 IP 주소 만 있습니다.

답변:


11

다음이 도움이 될 것입니다.

cp /etc/ssl/openssl.cnf /tmp/
echo '[ subject_alt_name ]' >> /tmp/openssl.cnf
echo 'subjectAltName = DNS:www.example.com, DNS:site1.example.com, DNS:site2.example.com' >> /tmp/openssl.cnf

openssl req -x509 -nodes -newkey rsa:2048 \
  -config /tmp/openssl.cnf \
  -extensions subject_alt_name \
  -keyout www.example.com.key \
  -out www.example.com.pem \
  -subj '/C=XX/ST=XXXX/L=XXXX/O=XXXX/OU=XXXX/CN=www.example.com/emailAddress=postmaster@example.com'

결과:

$ openssl x509 -in www.example.com.pem -text -noout
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 17965603478303142689 (0xf952a52d7bc7f321)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=XX, ST=XXXX, L=XXXX, O=XXXX, OU=XXXX, CN=www.example.com/emailAddress=flb.helpdesk@morpho.com
        Validity
            Not Before: Apr  3 15:34:27 2015 GMT
            Not After : May  3 15:34:27 2015 GMT
        Subject: C=XX, ST=XXXX, L=XXXX, O=XXXX, OU=XXXX, CN=www.example.com/emailAddress=flb.helpdesk@morpho.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:c6:e8:17:93:a4:8f:08:11:61:11:1b:cc:17:52:
                    b6:33:39:33:0e:94:3f:ac:ae:dd:70:4b:e6:d6:b0:
                    11:f1:93:b4:3d:dc:34:99:27:b6:45:4b:13:0c:69:
                    1e:11:d2:b9:38:5f:e0:d1:b0:58:e4:3c:c0:9f:58:
                    3d:5d:fa:67:3e:3c:05:1b:e3:86:20:18:d5:d7:83:
                    77:b5:0c:1d:9a:26:96:10:3f:2c:e5:ce:ed:6e:99:
                    5a:35:3e:06:f0:52:aa:72:5e:c0:33:7c:c8:16:f9:
                    6b:3e:7d:7e:5a:1f:cf:11:63:4d:ad:bf:77:bd:e3:
                    0f:8f:24:1d:f5:c8:06:ab:d9:62:8d:13:56:62:a9:
                    b8:77:c0:11:b6:ff:a7:63:93:a7:22:c2:41:48:6f:
                    bd:42:10:00:33:14:da:3b:ca:e0:07:c2:b6:50:55:
                    f0:4d:6b:0d:eb:87:a8:bd:4d:c6:1b:20:d8:27:68:
                    d0:e2:3b:32:91:b8:8e:cf:25:06:bf:43:fd:8f:96:
                    fa:eb:af:0f:e1:5c:47:06:84:8b:f4:35:0a:a8:f3:
                    7e:af:34:50:7f:62:bc:5e:53:09:90:97:27:cf:9a:
                    56:d7:f6:af:32:92:c4:c9:ab:90:6e:a6:09:20:0b:
                    46:28:22:0b:45:71:b9:17:77:d8:da:63:24:27:5c:
                    60:a5
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Alternative Name: 
                DNS:www.example.com, DNS:site1.example.com, DNS:site2.example.com
    Signature Algorithm: sha256WithRSAEncryption
         83:ce:18:74:f9:17:92:91:bd:82:13:ac:64:e7:de:9e:38:d7:
         26:0f:2d:3e:8f:f2:17:c5:fc:17:06:fb:27:e7:0a:b7:f2:8e:
         bb:18:6e:f4:4c:17:e8:8d:dc:51:d5:d2:e6:1c:72:e4:28:75:
         a2:79:ae:b6:b6:8c:ec:08:08:4d:73:79:b7:22:26:40:ac:38:
         5c:f2:2b:4f:44:60:55:db:90:b3:63:74:ad:e7:26:12:ad:0d:
         ec:4a:cd:4f:7a:a0:54:62:f5:a7:bc:80:c2:fa:34:43:3c:f1:
         aa:f7:6e:4e:e1:80:fb:c7:cc:44:3a:2b:a4:6c:5b:0f:3f:83:
         6e:8d:d5:28:cf:6c:f0:c6:40:4d:c4:d4:3f:9c:9d:a4:47:a7:
         27:d1:5b:2b:5f:0d:bd:3f:7c:2e:19:fa:bc:24:bd:1f:64:81:
         8b:a4:e3:33:10:35:55:f9:73:2d:8b:e8:b8:d7:e3:49:0c:35:
         af:53:df:48:d8:df:ce:b1:5f:6c:74:1c:74:89:45:2e:28:2c:
         1f:fe:d8:a4:44:9c:c7:bc:d8:6a:46:38:df:e3:d0:05:37:27:
         d0:08:e5:93:b8:0e:d9:d9:dd:7c:28:75:18:27:be:4e:72:47:
         13:b9:a2:93:0e:83:e9:b8:49:f4:75:ad:e0:0f:9b:e5:96:4f:
         33:33:f1:27

자체 서명 대신 요청을 원하면 -x509를 -new로 바꾸고 -extensions를 -reqexts로 바꾸십시오.


누군가 더 긴 만료 (예 : 10 년)가 필요한 경우-days 3650
Maris B.

3

subjectAltName : dNSName 이름 필드에 domain.com을 CN으로 사용 하고 * .domain.com을 사용하여 인증서를 작성하십시오 . 작동합니다.

에서 openssl, 확장이 추가 :

subjectAltName          = DNS:*.domain.com

CSR을 사용하지 않고 어떻게합니까?
Walf

3

AlberT의 답변을 확장하려면 :

http://blog.loftninjas.org/2008/11/11/configuring-ssl-requests-with-subjectaltname-with-openssl/

와일드 카드 도메인을 사용할 필요가 없습니다. 필요한 대체 호스트 이름으로 필요한 모든 호스트 이름을 나열 할 수 있으며 모든 주요 브라우저에서 작동해야합니다.


2
불행히도 그 링크는 죽었습니다. WayBackMachine에는 여전히 해당 블로그 게시에 대한 기록이 있습니다.
Jpsy

당시 기입 위 loftninjas.org 링크가 활성 (다시)이다.
Mikhail T.

0

우선-개별 가상 호스트마다 인증서를 할당 할 수 있습니다. 키는 각 가상 호스트에 대해 다른 개인용 (및 전세계에 액세스 가능하도록하려면 외부 / 공용) IP 주소를 만드는 것입니다.

그러나 가상 호스트가 단순히 * .example.com이면 와일드 카드 인증서를 할당 할 수도 있습니다.

명령의 경우-Google의 많은 결과가 있습니다- 여기에 예제를 넣으 십시오 .

http://www.justinsamuel.com/2006/03/11/howto-create-a-self-signed-wildcard-ssl-certificate/

일반 이름으로 * .example.com을 입력해야합니다.


1
그게 요점입니다-IP 주소가 하나뿐입니다. 내가 확실하지 않은 것 같아.
Vilx-

@coolwater-직장에서 프로덕션 서버를 설정하는 경우 좋은 조언 입니다. / 16 블록에 있습니다. 5 개의 고정 IP 만 제공하는 소규모 비즈니스 연결 사용자에게는 실제로 옵션이 아닙니다. IP 당 하나씩 5 개의 SSL Vhosts로 제한 하여이 문제를 해결했습니다.
Jason Antman
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.