SSL 인증서를 얻을 때까지

9754 단어 SSL 인증서HTTPS

SSL 인증서를 얻을 때까지



인증서를 만드는 흐름은 다음과 같습니다.
1. 개인 키 만들기
2. CSR(Certificate Signing Request)의 작성
3. CRT 작성(=인증서 작성)

우선, 각종 정보의 암호화, 복호에 사용하기 위한 비밀키를 작성합니다.
그런 다음 인증서 서명 요청을 만듭니다.
여기에는 방금 만든 비밀 키와 해당 공개 키와 인증서를 사용하는 사용자의 위치, 회사 이름 등의 정보가 포함됩니다.
마지막으로 인증서 서명 요청을 기반으로 신뢰할 수 있는 인증 기관에서 서명한 디지털 인증서를 만듭니다.
이번에는 스스로 자신을 증명하는 자기 증명서를 작성합니다.

1-1. 개인 키 생성 (비밀번호 없음)



RSA 방식으로 개인 키를 만듭니다.
[vagrant@localhost ~]$ openssl genrsa > server.key
Generating RSA private key, 2048 bit long modulus
................................................................+++
...........................+++
e is 65537 (0x10001)

1-2. 개인 키 생성 (비밀번호 포함)



RSA 방식으로 비밀 키를 작성한 후 AES로 비밀 키를 암호화합니다.
비밀번호가 없는 비밀키가 도난당하면 누구나 사용할 수 있는 반면, 이쪽은 비밀번호를 모르면 사용할 수 없습니다.
[vagrant@localhost ~]$ openssl genrsa -aes128 > server.key
Generating RSA private key, 2048 bit long modulus
.....+++
.......+++
e is 65537 (0x10001)
Enter pass phrase:
Verifying - Enter pass phrase:

이번은 검증이므로 패스워드 없는 비밀키로 진행합니다.

Ex. 공개키 생성



인증서를 만드는 데 이 단계는 필요하지 않지만 이해를 돕기 위해 작성합니다.
[vagrant@localhost ~]$ openssl rsa -pubout -in  server.key - out pub.key
writing RSA key

만든 키의 세부 사항을 살펴 보겠습니다.
[vagrant@localhost ~]$ openssl rsa -text -pubin -noout -in  pub.key
Public-Key: (2048 bit)
Modulus:
    00:96:ae:3c:34:24:64:37:d7:1c:14:38:cd:3c:8e:
    50:c9:32:25:b6:9c:5b:e8:0f:b6:3f:37:01:de:38:
    32:b4:78:7a:dd:58:2b:89:b7:5a:d9:08:b8:d3:73:
    66:41:fd:5e:97:42:48:be:e9:35:da:d6:9c:17:4f:
    81:8a:25:34:ca:80:9a:24:62:fc:0e:f9:9d:3f:ce:
    51:99:5d:55:d2:3d:81:5f:17:c8:cb:25:54:bf:d1:
    fa:43:b0:82:8c:41:d7:e9:78:0f:2b:df:af:8b:ac:
    cb:0b:5f:6d:b7:58:1e:60:db:f9:c2:77:a0:0c:d1:
    33:e5:0a:68:30:5a:48:4a:d1:5c:38:90:43:9f:7a:
    e0:d8:dd:3d:5c:a6:5f:b6:f4:fa:25:64:ed:4e:13:
    14:75:6f:f7:b5:4b:b5:70:c4:b6:b1:38:ef:94:86:
    1a:15:0d:8c:29:e4:99:90:fe:42:86:a3:cb:df:0c:
    fb:97:ff:f2:e2:08:a2:bd:5b:c6:0c:33:b2:a3:bf:
    46:58:f1:71:9a:39:48:a3:d5:85:79:81:24:40:32:
    8b:bd:d9:5c:b5:d7:3e:6a:9f:5e:a2:2c:02:98:83:
    f4:1f:35:7b:f3:08:d9:1c:d0:59:2b:53:94:63:32:
    88:2e:29:49:43:43:6b:e6:a3:bf:0b:a4:ba:41:d6:
    a5:db
Exponent: 65537 (0x10001)

2. CSR (Certificate Signing Request)의 작성



인증서를 만드는 데 필요한 CSR을 만듭니다.
[vagrant@localhost ~]$ openssl req -new -key server.key -out server.csr
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.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:test
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

작성한 CSR의 세부 사항을 살펴 보겠습니다.
[vagrant@localhost ~]$ openssl req -text -noout -in server.csr
Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=JP, L=Default City, O=Default Company Ltd, CN=test
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:96:ae:3c:34:24:64:37:d7:1c:14:38:cd:3c:8e:
                    50:c9:32:25:b6:9c:5b:e8:0f:b6:3f:37:01:de:38:
                    32:b4:78:7a:dd:58:2b:89:b7:5a:d9:08:b8:d3:73:
                    66:41:fd:5e:97:42:48:be:e9:35:da:d6:9c:17:4f:
                    81:8a:25:34:ca:80:9a:24:62:fc:0e:f9:9d:3f:ce:
                    51:99:5d:55:d2:3d:81:5f:17:c8:cb:25:54:bf:d1:
                    fa:43:b0:82:8c:41:d7:e9:78:0f:2b:df:af:8b:ac:
                    cb:0b:5f:6d:b7:58:1e:60:db:f9:c2:77:a0:0c:d1:
                    33:e5:0a:68:30:5a:48:4a:d1:5c:38:90:43:9f:7a:
                    e0:d8:dd:3d:5c:a6:5f:b6:f4:fa:25:64:ed:4e:13:
                    14:75:6f:f7:b5:4b:b5:70:c4:b6:b1:38:ef:94:86:
                    1a:15:0d:8c:29:e4:99:90:fe:42:86:a3:cb:df:0c:
                    fb:97:ff:f2:e2:08:a2:bd:5b:c6:0c:33:b2:a3:bf:
                    46:58:f1:71:9a:39:48:a3:d5:85:79:81:24:40:32:
                    8b:bd:d9:5c:b5:d7:3e:6a:9f:5e:a2:2c:02:98:83:
                    f4:1f:35:7b:f3:08:d9:1c:d0:59:2b:53:94:63:32:
                    88:2e:29:49:43:43:6b:e6:a3:bf:0b:a4:ba:41:d6:
                    a5:db
                Exponent: 65537 (0x10001)
        Attributes:
            a0:00
    Signature Algorithm: sha256WithRSAEncryption
         5d:74:a3:f1:f6:a0:63:29:82:2e:56:dc:3e:6a:12:e5:64:99:
         d0:b8:5a:96:35:75:88:16:c0:7b:c0:07:ed:15:70:c0:ae:e8:
         12:37:a3:88:be:66:07:a4:cd:d6:ad:6f:d1:e8:06:79:6d:15:
         e0:27:09:cd:74:66:33:ea:88:d4:78:79:a7:f7:52:1a:19:a1:
         55:92:cc:73:c1:7e:1b:81:0e:04:21:43:cd:c4:14:1b:f0:8f:
         07:1c:12:6c:f5:14:d2:75:e9:02:98:76:44:c8:18:45:58:6e:
         40:79:74:7e:62:c4:fd:6a:33:ac:23:8c:d2:b6:78:70:0c:9b:
         8a:14:04:b2:70:f9:4a:11:d0:32:dc:fa:bd:d6:cd:b9:77:1a:
         ca:23:86:61:1f:c5:58:89:11:e0:cf:93:0c:1f:4c:7f:9a:91:
         40:c9:a4:26:2e:da:09:18:03:61:f5:48:9d:7b:5f:02:fc:d4:
         1f:83:eb:55:ed:9b:4f:6b:1d:03:ea:6d:96:9e:3d:04:e8:9d:
         68:8b:03:d4:e8:4e:45:f2:b4:6a:47:fa:24:cc:4d:cb:1b:da:
         9d:85:77:00:5a:ca:41:59:92:46:88:d9:fc:c7:3f:ad:ca:b2:
         d6:d8:bf:1f:17:0e:86:57:7a:bf:7a:7c:a7:39:6c:97:ec:cf:
         79:0a:4a:a5

module 아래에 주목하십시오. 방금 만든 공개 키가 포함되어 있음을 알 수 있습니다.
또 「Signature Algorithm: sha256WithRSAEncryption」이 되고 있네요.
이것은 sha256에서 해시 값을 찾은 후 개인 키로 암호화한다는 것입니다.

즉 서명하면,
버전, 시리얼 번호, 주제, 공개키등의 정보(=서명 증명서)를 해시화해, 그것을 암호화한다고 하는 것입니다.

인증 기관은 다음 두 가지를 확인하여 검증합니다.
1. 첨부된 서명으로부터 공개키로 복호함으로써 얻은 해시값
2. 서명 증명서로부터 Signature Algorithm에 기재된 해시 함수에 의해 구한 해시값

일치하면 증명서는 변조되어 있지 않다, 증명서의 작성자는 그 첨부된 공개키의 쌍이 되는 비공개키를 가지는 서버 자신인 것을 알 수 있습니다.

검증에 대해서는 이하를 알기 쉽네요.

Image from the Wikimedia Commons

3. CRT 만들기



방금 만든 csr을 바탕으로 자신의 개인 키로 서명합니다.
이것이 소위 자기 증명서입니다.
본래라면 여기는 신뢰할 수 있는 제3자의 증명 기관에 의해 서명하게 됩니다.
[vagrant@localhost ~]$ openssl x509 -text -noout -in server.crt
Certificate:
    Data:
        Version: 1 (0x0)
        Serial Number:
            88:22:73:89:fb:e0:af:70
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=JP, L=Default City, O=Default Company Ltd, CN=test
        Validity
            Not Before: Jul 19 15:20:27 2019 GMT
            Not After : Nov 19 15:20:27 3018 GMT
        Subject: C=JP, L=Default City, O=Default Company Ltd, CN=test
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:96:ae:3c:34:24:64:37:d7:1c:14:38:cd:3c:8e:
                    50:c9:32:25:b6:9c:5b:e8:0f:b6:3f:37:01:de:38:
                    32:b4:78:7a:dd:58:2b:89:b7:5a:d9:08:b8:d3:73:
                    66:41:fd:5e:97:42:48:be:e9:35:da:d6:9c:17:4f:
                    81:8a:25:34:ca:80:9a:24:62:fc:0e:f9:9d:3f:ce:
                    51:99:5d:55:d2:3d:81:5f:17:c8:cb:25:54:bf:d1:
                    fa:43:b0:82:8c:41:d7:e9:78:0f:2b:df:af:8b:ac:
                    cb:0b:5f:6d:b7:58:1e:60:db:f9:c2:77:a0:0c:d1:
                    33:e5:0a:68:30:5a:48:4a:d1:5c:38:90:43:9f:7a:
                    e0:d8:dd:3d:5c:a6:5f:b6:f4:fa:25:64:ed:4e:13:
                    14:75:6f:f7:b5:4b:b5:70:c4:b6:b1:38:ef:94:86:
                    1a:15:0d:8c:29:e4:99:90:fe:42:86:a3:cb:df:0c:
                    fb:97:ff:f2:e2:08:a2:bd:5b:c6:0c:33:b2:a3:bf:
                    46:58:f1:71:9a:39:48:a3:d5:85:79:81:24:40:32:
                    8b:bd:d9:5c:b5:d7:3e:6a:9f:5e:a2:2c:02:98:83:
                    f4:1f:35:7b:f3:08:d9:1c:d0:59:2b:53:94:63:32:
                    88:2e:29:49:43:43:6b:e6:a3:bf:0b:a4:ba:41:d6:
                    a5:db
                Exponent: 65537 (0x10001)
    Signature Algorithm: sha256WithRSAEncryption
         44:8a:b4:8e:14:43:5a:3c:2a:d8:50:91:c9:2b:30:61:5b:a0:
         6a:20:29:5b:59:55:f9:41:0d:97:80:64:4e:d9:76:de:3a:e0:
         31:b1:73:92:89:5f:c7:8f:ab:84:42:66:9e:3c:80:97:48:b6:
         41:62:2e:56:b5:21:c4:ad:04:0d:cf:d6:f5:88:2a:b5:64:b0:
         a7:c3:95:4f:5d:e2:c5:b5:f3:fa:74:41:01:04:7d:1c:70:2f:
         7f:3e:6a:e4:bd:9e:df:43:84:21:3f:52:1b:e7:76:13:3c:32:
         e5:e6:cb:3d:cd:f1:5a:af:3a:2c:c5:1b:1b:9d:95:55:76:17:
         5d:79:34:f9:9d:3f:90:3a:27:5e:85:5f:da:10:54:ef:96:a0:
         d9:de:cb:01:84:e6:76:6a:8b:9f:40:53:9f:70:5f:2d:b2:fb:
         3d:5d:bf:c5:cd:ec:01:46:e7:46:23:b6:ae:3c:fd:72:f2:a1:
         47:4c:e1:14:05:50:98:0f:0f:17:65:5b:4f:34:5c:fb:e0:74:
         70:70:f4:1f:63:39:7b:32:39:b2:57:19:b0:b5:dd:41:f2:14:
         f5:74:39:3f:57:25:ed:91:0b:4b:9d:e7:6b:a8:9f:3e:18:c0:
         68:21:c5:60:16:95:3e:54:d5:36:5d:af:ca:34:ba:87:5f:c3:
         df:18:7a:37

이것으로 완성입니다.

참고문헌

좋은 웹페이지 즐겨찾기