OpenSSL ๋กœ ROOT CA ์ƒ์„ฑ ๋ฐ SSL ์ธ์ฆ์„œ ๋ฐœ๊ธ‰

๊ฐ„๋‹จํ•˜๊ฒŒ CA ๋ฅผ ๊ตฌ์„ฑํ•˜๋ ค๋ฉด openssl ์„ ๋ž˜ํ•‘ํ•œ easy rsa ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.


๊ฐœ์š”

์›น์„œ๋น„์Šค์— https ๋ฅผ ์ ์šฉํ•  ๊ฒฝ์šฐ SSL ์ธ์ฆ์„œ๋ฅผ VeriSign ์ด๋‚˜ Thawte, GeoTrust ๋“ฑ์—์„œ ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰๋ฐ›์•„์•ผ ํ•˜์ง€๋งŒ ๋น„์šฉ์ด ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ์‹ค์ œ ์šด์˜ ์„œ๋ฒ„๊ฐ€ ์•„๋‹ˆ๋ฉด ๋ฐœ๊ธ‰ ๋ฐ›๋Š”๋ฐ ๋ถ€๋‹ด์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

์ด๋Ÿด๋•Œ OpenSSL ์„ ์ด์šฉํ•˜์—ฌ ์ธ์ฆ๊ธฐ๊ด€์„ ๋งŒ๋“ค๊ณ  Self signed certificate ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  SSL ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰ํ•˜๋Š” ๋ฒ•์„ ์ •๋ฆฌํ•ด ๋ณธ๋‹ค.

๋ฐœ๊ธ‰๋œ SSL ์ธ์ฆ์„œ๋Š” apache httpd ๋“ฑ์˜ Web Server ์— ์„ค์น˜ํ•˜์—ฌ ์†์‰ฝ๊ฒŒ https ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค.


Self Signed Certificate ?

์ธ์ฆ์„œ(digital certificate)๋Š” ๊ฐœ์ธํ‚ค ์†Œ์œ ์ž์˜ ๊ณต๊ฐœํ‚ค(public key)์— ์ธ์ฆ๊ธฐ๊ด€์˜ ๊ฐœ์ธํ‚ค๋กœ ์ „์ž์„œ๋ช…ํ•œ ๋ฐ์ดํƒ€๋‹ค.

๋ชจ๋“  ์ธ์ฆ์„œ๋Š”ย ๋ฐœ๊ธ‰๊ธฐ๊ด€(CA) ์ด ์žˆ์–ด์•ผ ํ•˜๋‚˜ ์ตœ์ƒ์œ„์— ์žˆ๋Š” ์ธ์ฆ๊ธฐ๊ด€(root ca)์€ ์„œ๋ช…ํ•ด์ค„ ์ƒ์œ„ ์ธ์ฆ๊ธฐ๊ด€์ด ์—†์œผ๋ฏ€๋กœ root ca์˜ ๊ฐœ์ธํ‚ค๋กœ ์Šค์Šค๋กœ์˜ ์ธ์ฆ์„œ์— ์„œ๋ช…ํ•˜์—ฌ ์ตœ์ƒ์œ„ ์ธ์ฆ๊ธฐ๊ด€ ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“ ๋‹ค.

์ด๋ ‡๊ฒŒ ์Šค์Šค๋กœ ์„œ๋ช…ํ•œ ROOT CA ์ธ์ฆ์„œ๋ฅผ Self Signed Certificate(SSC) ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

IE, FireFox, Chrome ๋“ฑ์˜ Web Browser ์ œ์ž‘์‚ฌ๋Š” VeriSign ์ด๋‚˜ comodo ๊ฐ™์€ ์œ ๋ช… ROOT CA ๋“ค์˜ ์ธ์ฆ์„œ๋ฅผ ์‹ ๋ขฐํ•˜๋Š” CA๋กœ ๋ธŒ๋ผ์šฐ์ €์— ๋ฏธ๋ฆฌ ํƒ‘์žฌํ•ด ๋†“๋Š”๋‹ค.

์ €๋Ÿฐ ๊ธฐ๊ด€์—์„œ ๋ฐœ๊ธ‰๋œ SSL ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ browser ์—์„œ๋Š” ํ•ด๋‹น SSL ์ธ์ฆ์„œ๋ฅผ ์‹ ๋ขฐํ• ์ˆ˜ ์žˆ๋Š”๋ฐ OpenSSL ๋กœ ๋งŒ๋“  ROOT CA์™€ SSL ์ธ์ฆ์„œ๋Š” Browser๊ฐ€ ๋ชจ๋ฅด๋Š” ๊ธฐ๊ด€์ด ๋ฐœ๊ธ‰ํ•œ ์ธ์ฆ์„œ์ด๋ฏ€๋กœ ๋ณด์•ˆ ๊ฒฝ๊ณ ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ๊ฒƒ์ด๋‚˜ ํ…Œ์ŠคํŠธ ์‚ฌ์šฉ์—๋Š” ์ง€์žฅ์ด ์—†๋‹ค.

ROOT CA ์ธ์ฆ์„œ๋ฅผ Browser์— ์ถ”๊ฐ€ํ•˜์—ฌ ๋ณด์•ˆ ๊ฒฝ๊ณ ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š์œผ๋ ค๋ฉดย Browser ์— SSL ์ธ์ฆ์„œ ๋ฐœ๊ธ‰๊ธฐ๊ด€ ์ถ”๊ฐ€ํ•˜๊ธฐย ๋ฅผ ์ฐธ๊ณ ํ•˜์ž.


Certificate Signing Request?

๊ณต๊ฐœํ‚ค ๊ธฐ๋ฐ˜(PKI)์€ private key(๊ฐœ์ธํ‚ค)์™€ public key(๊ณต๊ฐœํ‚ค)๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

์ธ์ฆ์„œ๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ์€ ๋‚ด ๊ณต๊ฐœํ‚ค๊ฐ€ ๋งž๋‹ค๊ณ  ์ธ์ฆ๊ธฐ๊ด€(CA)์ด ์ „์ž์„œ๋ช…ํ•˜์—ฌ ์ฃผ๋Š” ๊ฒƒ์ด๋ฉฐ ๋‚˜์™€ ๋ณด์•ˆ ํ†ต์‹ ์„ ํ•˜๋ ค๋Š” ๋‹น์‚ฌ์ž๋Š” ๋‚ด ์ธ์ฆ์„œ๋ฅผ ๊ตฌํ•ด์„œ ๊ทธ ์•ˆ์— ์žˆ๋Š” ๊ณต๊ฐœํ‚ค๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ณด์•ˆ ํ†ต์‹ ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

CSR(Certificate Signing Request) ์€ ์ธ์ฆ๊ธฐ๊ด€์— ์ธ์ฆ์„œ ๋ฐœ๊ธ‰ ์š”์ฒญ์„ ํ•˜๋Š” ํŠน๋ณ„ํ•œ ASN.1 ํ˜•์‹์˜ ํŒŒ์ผ์ด๋ฉฐ(PKCS#10 - RFC2986) ย ๊ทธ ์•ˆ์—๋Š” ๋‚ด ๊ณต๊ฐœํ‚ค ์ •๋ณด์™€ ์‚ฌ์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ •๋ณด๋“ฑ์ด ๋“ค์–ด ์žˆ๋‹ค.

๊ฐœ์ธํ‚ค๋Š” ์™ธ๋ถ€์— ์œ ์ถœ๋˜๋ฉด ์•ˆ ๋˜๋ฏ€๋กœ ์ €๋Ÿฐ ํŠน๋ณ„ํ•œ ํ˜•์‹์˜ ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์„œ ์ธ์ฆ๊ธฐ๊ด€์— ์ „๋‹ฌํ•˜์—ฌ ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰ ๋ฐ›๋Š”๋‹ค.

SSL ์ธ์ฆ์„œ ๋ฐœ๊ธ‰์‹œ CSR ์ƒ์„ฑ์€ Web Server ์—์„œ ์ด๋ฃจ์–ด์ง€๋Š”๋ฐ Web Server ๋งˆ๋‹ค ๋ฐฉ์‹์ด ์ƒ์ดํ•˜์—ฌ ์‚ฌ์šฉ์ž๋“ค์ด CSR ์ƒ์„ฑ๋“ฑ์„ ์–ด๋ ค์›Œํ•˜๋‹ˆ ์ธ์ฆ์„œ ๋ฐœ๊ธ‰ ๋Œ€ํ–‰ ๊ธฐ๊ด€์—์„œ ๊ฐœ์ธํ‚ค๊นŒ์ง€ ์ƒ์„ฑํ•ด์„œ ๋ณด๋‚ด์ฃผ๊ณ ๋Š” ํ•œ๋‹ค.

ROOT CA ์ธ์ฆ์„œ ์ƒ์„ฑ

openssl ๋กœ root ca ์˜ ๊ฐœ์ธํ‚ค์™€ ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“ค์–ด ๋ณด์ž

  1. CA ๊ฐ€ ์‚ฌ์šฉํ•  RSA ย key pair(public, private key)ย ์ƒ์„ฑ

    2048bit ๊ฐœ์ธํ‚ค ์ƒ์„ฑ
    openssl genrsa -aes256 -out lesstif-rootca.key 2048

    ๊ฐœ์ธํ‚ค ๋ถ„์‹ค์— ๋Œ€๋น„ํ•ด AES 256bit ๋กœ ์•”ํ˜ธํ™”ํ•œ๋‹ค. AES ์ด๋ฏ€๋กœ ์•”ํ˜ธ(pass phrase)๋ฅผ ๋ถ„์‹คํ•˜๋ฉด ๊ฐœ์ธํ‚ค๋ฅผ ์–ป์„์ˆ˜ ์—†์œผ๋‹ˆ ๊ผญ ๊ธฐ์–ตํ•ด์•ผ ํ•œ๋‹ค.

  2. ๊ฐœ์ธํ‚ค ๊ถŒํ•œ ์„ค์ •

    ๋ณด์•ˆ ๊ฒฝ๊ณ 

    ๊ฐœ์ธํ‚ค์˜ ์œ ์ถœ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ์†Œ์œ ์ž๋งŒ ์ฝ์„์ˆ˜ ์žˆ๋„๋ก group ๊ณผ other์˜ permission ์„ ๋ชจ๋‘ ์ œ๊ฑฐํ•˜๋Š”๊ฒŒ ์ข‹๋‹ค.

    chmod 600 lesstif-rootca.key
  3. CSR(Certificate Signing Request) ์ƒ์„ฑ์„ ์œ„ํ•œ openssl ์„ค์ • ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  rootca_openssl.conf(๋ณ€๊ฒฝ ๊ฐ€๋Šฅ) ๋กœ ์ €์žฅํ•œ๋‹ค.

    rootca_openssl.conf
    [ req ]
    default_bits            = 2048
    default_md              = sha1
    default_keyfile         = lesstif-rootca.key
    distinguished_name      = req_distinguished_name
    extensions             = v3_ca
    req_extensions = v3_ca
    ย 
    [ v3_ca ]
    basicConstraints       = critical, CA:TRUE, pathlen:0
    subjectKeyIdentifier   = hash
    ##authorityKeyIdentifier = keyid:always, issuer:always
    keyUsage               = keyCertSign, cRLSign
    nsCertType             = sslCA, emailCA, objCA
    [req_distinguished_name ]
    countryName                     = Country Name (2 letter code)
    countryName_default             = KR
    countryName_min                 = 2
    countryName_max                 = 2
    
    # ํšŒ์‚ฌ๋ช… ์ž…๋ ฅ
    organizationName              = Organization Name (eg, company)
    organizationName_default      = lesstif Inc.
    ย 
    # ๋ถ€์„œ ์ž…๋ ฅ
    #organizationalUnitName          = Organizational Unit Name (eg, section)
    #organizationalUnitName_default  = Condor Project
    ย 
    # SSL ์„œ๋น„์Šคํ•  domain ๋ช… ์ž…๋ ฅ
    commonName                      = Common Name (eg, your name or your server's hostname)
    commonName_default             = lesstif's Self Signed CA
    commonName_max                  = 64ย 

    Root CA ์šฉ CSR ์š”์ฒญ ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค.

    ์ธ์ฆ์„œ ์š”์ฒญ ์ƒ์„ฑ
    openssl req -new -key lesstif-rootca.key -out lesstif-rootca.csr -config rootca_openssl.conf

    ์•„๋ž˜๋Š” OpenSSL ์˜ ํ”„๋กฌํ”„ํŠธ

    ์ธ์ฆ์„œ ์š”์ฒญ ์ƒ์„ฑ
    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) [KR]:
    Organization Name (eg, company) [lesstif Inc]:lesstif Inc.
    Common Name (eg, your name or your servers hostname) [lesstif's Self Signed CA]:lesstif's Self Signed CA
  4. 10๋…„์งœ๋ฆฌ self-signed ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ธ์ฆ์„œ๋Š” -out ์˜ต์…˜ ๋’ค์— ๊ธฐ์ˆ ํ•œ ํŒŒ์ผ๋ช…(์˜ˆ: lesstif-rootca.crt) ์œผ๋กœ ์ƒ์„ฑ๋œ๋‹ค.

    -extensions v3_ca ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค.
    openssl x509 -req -days 3650 \
    -extensions v3_ca \
    -set_serial 1 \
    -in lesstif-rootca.csr \
    -signkey lesstif-rootca.key \
    -out lesstif-rootca.crt \
    -extfile rootca_openssl.conf

    ์„œ๋ช…์— ์‚ฌ์šฉํ•  ํ•ด์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด -sha256, -sha384, -sha512 ์ฒ˜๋Ÿผ ํ•ด์‹œ๋ฅผ ์ง€์ •ํ•˜๋Š” ์˜ต์…˜์„ ์ „๋‹ฌํ•ด ์ค€๋‹ค.

    ๊ธฐ๋ณธ๊ฐ’์€ -sha256 ์ด๋ฉฐ openssl 1.0.2 ์ด์ƒ์ด ํ•„์š”

  5. ์ œ๋Œ€๋กœ ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ์„ ์œ„ํ•ด ์ธ์ฆ์„œ์˜ ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•ด ๋ณธ๋‹ค.

    openssl x509 -text -in lesstif-rootca.crt
    ย Click here to expand...
    Certificate:
        Data:
            Version: 3 (0x2)
            Serial Number: 1 (0x1)
            Signature Algorithm: sha256WithRSAEncryption
            Issuer: C = KR, O = lesstif Inc., CN = lesstifs Self Signed CA
            Validity
                Not Before: Oct  8 00:47:36 2021 GMT
                Not After : Oct  6 00:47:36 2031 GMT
            Subject: C = KR, O = lesstif Inc., CN = lesstifs Self Signed CA
            Subject Public Key Info:
                Public Key Algorithm: rsaEncryption
                    RSA Public-Key: (2048 bit)
                    Modulus:
                        00:d1:89:a7:8a:c3:d8:ef:1b:70:b5:3e:a1:1f:89:
                        14:00:d8:ce:67:ad:a6:23:67:f3:be:18:03:21:f3:
                        04:a4:d2:a1:92:9b:f3:71:e7:e3:b4:52:f1:6f:c8:
                        8c:be:28:6f:13:ad:04:36:b0:32:ab:37:f0:68:81:
                        b0:33:eb:68:ef:10:1e:ab:17:4a:3b:92:6e:e6:2f:
                        68:32:0f:d9:24:d6:26:24:42:c9:12:60:d8:3d:60:
                        36:93:cb:73:68:d8:11:94:1c:ee:26:22:24:25:70:
                        65:f4:13:81:52:8d:1f:2c:6f:a8:e5:77:f3:05:fd:
                        dd:50:d3:b0:93:6a:d7:23:3f:35:73:c2:ef:e2:42:
                        ce:a4:46:c2:1f:2f:2c:ac:56:51:18:62:49:17:13:
                        3a:cc:59:ff:8c:e7:8c:fe:21:d2:1e:d5:ad:75:b1:
                        3e:b1:be:52:bf:4e:53:46:48:c8:15:6a:56:c0:77:
                        1b:13:de:20:14:ad:01:0a:c8:0d:96:cd:ac:9b:10:
                        1f:cb:8d:0f:59:20:5c:44:ab:b2:46:b9:60:ba:e4:
                        7d:11:a3:a5:f9:8a:d6:26:4a:f1:a0:e9:e6:c8:4c:
                        8b:29:83:89:ae:a7:ad:ac:21:76:96:aa:6e:58:99:
                        89:d0:8a:f3:1b:b5:04:e4:c1:11:bb:ff:2a:82:a5:
                        0d:f3
                    Exponent: 65537 (0x10001)
            X509v3 extensions:
                X509v3 Basic Constraints: critical
                    CA:TRUE, pathlen:0
                X509v3 Subject Key Identifier:
                    1B:15:F8:0E:D9:A2:E2:7A:0D:3D:DB:B4:CF:7B:35:F2:CB:B3:FC:BE
                X509v3 Key Usage:
                    Certificate Sign, CRL Sign
                Netscape Cert Type:
                    SSL CA, S/MIME CA, Object Signing CA
        Signature Algorithm: sha256WithRSAEncryption
             12:4f:52:d8:cf:e2:51:4f:93:a7:5e:ae:06:3b:7c:e3:82:48:
             eb:1c:c5:4c:cd:c6:62:4e:c7:90:7a:18:f8:00:2e:78:f2:e0:
             d5:c8:3a:6d:8e:e1:b3:81:81:a4:6e:0c:cc:b9:45:27:b1:76:
             e0:d5:d6:18:6f:a0:5f:a3:8f:66:8c:2f:42:43:f7:85:ce:7d:
             87:4e:47:76:4a:a2:20:3a:1b:b6:6a:69:0a:f8:a6:2c:c4:f6:
             42:2e:cf:7d:c4:08:aa:50:91:32:c8:00:0d:02:31:33:90:70:
             9a:d6:97:2b:1f:70:18:c3:46:cd:13:3b:5d:ce:22:56:82:b2:
             d9:ba:b6:ac:c5:3b:96:70:88:75:2a:a9:f6:de:42:e1:64:95:
             1a:ab:07:49:f5:10:b4:1e:79:9c:75:c2:9f:41:6d:fe:ee:2d:
             13:bc:c6:7f:3e:35:12:ae:f7:b9:fa:24:78:ed:12:8b:9c:e0:
             8a:20:b0:ad:fb:ab:4a:06:3b:96:eb:38:bf:89:7a:7e:c8:a7:
             99:7d:3b:57:c5:ed:41:48:f6:c7:5e:e1:cb:7f:c7:86:78:e6:
             20:70:91:78:ed:f8:8b:54:8d:38:00:d7:1c:e7:e4:3f:86:27:
             7f:b2:e5:ae:3d:b5:fa:43:3b:3a:68:41:02:f5:34:3d:68:21:
             83:fc:0a:ec
    -----BEGIN CERTIFICATE-----
    MIIDXDCCAkSgAwIBAgIBATANBgkqhkiG9w0BAQsFADBGMQswCQYDVQQGEwJLUjEV
    MBMGA1UECgwMbGVzc3RpZiBJbmMuMSAwHgYDVQQDDBdsZXNzdGlmcyBTZWxmIFNp
    Z25lZCBDQTAeFw0yMTEwMDgwMDQ3MzZaFw0zMTEwMDYwMDQ3MzZaMEYxCzAJBgNV
    BAYTAktSMRUwEwYDVQQKDAxsZXNzdGlmIEluYy4xIDAeBgNVBAMMF2xlc3N0aWZz
    IFNlbGYgU2lnbmVkIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
    0YmnisPY7xtwtT6hH4kUANjOZ62mI2fzvhgDIfMEpNKhkpvzcefjtFLxb8iMvihv
    E60ENrAyqzfwaIGwM+to7xAeqxdKO5Ju5i9oMg/ZJNYmJELJEmDYPWA2k8tzaNgR
    lBzuJiIkJXBl9BOBUo0fLG+o5XfzBf3dUNOwk2rXIz81c8Lv4kLOpEbCHy8srFZR
    GGJJFxM6zFn/jOeM/iHSHtWtdbE+sb5Sv05TRkjIFWpWwHcbE94gFK0BCsgNls2s
    mxAfy40PWSBcRKuyRrlguuR9EaOl+YrWJkrxoOnmyEyLKYOJrqetrCF2lqpuWJmJ
    0IrzG7UE5MERu/8qgqUN8wIDAQABo1UwUzASBgNVHRMBAf8ECDAGAQH/AgEAMB0G
    A1UdDgQWBBQbFfgO2aLieg0927TPezXyy7P8vjALBgNVHQ8EBAMCAQYwEQYJYIZI
    AYb4QgEBBAQDAgAHMA0GCSqGSIb3DQEBCwUAA4IBAQAST1LYz+JRT5OnXq4GO3zj
    gkjrHMVMzcZiTseQehj4AC548uDVyDptjuGzgYGkbgzMuUUnsXbg1dYYb6Bfo49m
    jC9CQ/eFzn2HTkd2SqIgOhu2amkK+KYsxPZCLs99xAiqUJEyyAANAjEzkHCa1pcr
    H3AYw0bNEztdziJWgrLZurasxTuWcIh1Kqn23kLhZJUaqwdJ9RC0HnmcdcKfQW3+
    7i0TvMZ/PjUSrve5+iR47RKLnOCKILCt+6tKBjuW6zi/iXp+yKeZfTtXxe1BSPbH
    XuHLf8eGeOYgcJF47fiLVI04ANcc5+Q/hid/suWuPbX6Qzs6aEEC9TQ9aCGD/Ars
    -----END CERTIFICATE-----


SSL ์ธ์ฆ์„œ ๋ฐœ๊ธ‰

์œ„์—์„œ ์ƒ์„ฑํ•œ root ca ์„œ๋ช…ํ‚ค๋กœ SSL ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰ํ•ด ๋ณด์ž

ํ‚ค ์Œ ์ƒ์„ฑ

1.ย SSL ํ˜ธ์ŠคํŠธ์—์„œ ์‚ฌ์šฉํ•  RSA ย key pair(public, private key) ์ƒ์„ฑ

2048bit ๊ฐœ์ธํ‚ค ์ƒ์„ฑ
openssl genrsa -aes256 -out lesstif.com.key 2048


2. Remove Passphrase from key

๊ฐœ์ธํ‚ค๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด Key-Derived Function ์œผ๋กœ ๊ฐœ์ธํ‚ค ์ž์ฒด๊ฐ€ ์•”ํ˜ธํ™”๋˜์–ด ์žˆ๋‹ค. ์ธํ„ฐ๋„ท ๋ฑ…ํ‚น๋“ฑ์— ์‚ฌ์šฉ๋˜๋Š” ๊ฐœ์ธ์šฉ ์ธ์ฆ์„œ๋Š” ๋‹น์—ฐํžˆ ์ €๋ ‡๊ฒŒ ๋ณดํ˜ธ๋˜์–ด์•ผ ํ•˜์ง€๋งŒ SSL ์— ์‚ฌ์šฉํ•˜๋ ค๋Š” ํ‚ค๊ฐ€ ์•”ํ˜ธ๊ฐ€ ๊ฑธ๋ ค์žˆ์œผ๋ฉด ์›น ์„œ๋ฒ„ ๊ตฌ๋™๋•Œ๋งˆ๋‹ค pass phrase ๋ฅผ ์ž…๋ ฅํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์•”ํ˜ธ๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.

๊ฐœ์ธํ‚ค pass phrase ์ œ๊ฑฐ
cp  lesstif.com.key  lesstif.com.key.enc
openssl rsa -in  lesstif.com.key.enc -out lesstif.com.key

๋ณด์•ˆ ๊ฒฝ๊ณ 

๊ฐœ์ธํ‚ค์˜ ์œ ์ถœ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด group ๊ณผ other์˜ permission ์„ ๋ชจ๋‘ ์ œ๊ฑฐํ•œ๋‹ค.

chmod 600 lesstif.com.key*

CSR ์ƒ์„ฑ

1. CSR(Certificate Signing Request) ์ƒ์„ฑ์„ ์œ„ํ•œ openssl config ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  host_openssl.conf(๋ณ€๊ฒฝ ๊ฐ€๋Šฅ) ๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ €์žฅํ•œ๋‹ค.

host_openssl.conf
[ req ]
default_bits            = 2048
default_md              = sha1
default_keyfile         = lesstif-rootca.key
distinguished_name      = req_distinguished_name
extensions             = v3_user
## ์ธ์ฆ์„œ ์š”์ฒญ์‹œ์—๋„ extension ์ด ๋“ค์–ด๊ฐ€๋ฉด authorityKeyIdentifier ๋ฅผ ์ฐพ์ง€ ๋ชปํ•ด ์—๋Ÿฌ๊ฐ€ ๋‚˜๋ฏ€๋กœ ๋ง‰์•„๋‘”๋‹ค.
## req_extensions = v3_user

[ v3_user ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
authorityKeyIdentifier = keyid,issuer
subjectKeyIdentifier = hash
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
## SSL ์šฉ ํ™•์žฅํ‚ค ํ•„๋“œ
extendedKeyUsage = serverAuth,clientAuth
subjectAltName          = @alt_names
[ alt_names]
## Subject AltName์˜ DNSName field์— SSL Host ์˜ ๋„๋ฉ”์ธ ์ด๋ฆ„์„ ์ ์–ด์ค€๋‹ค.
## ๋ฉ€ํ‹ฐ ๋„๋ฉ”์ธ์ผ ๊ฒฝ์šฐ *.lesstif.com ์ฒ˜๋Ÿผ ์“ธ ์ˆ˜ ์žˆ๋‹ค.
DNS.1   = www.lesstif.com
DNS.2   = lesstif.com
DNS.3   = *.lesstif.com

[req_distinguished_name ]
countryName                     = Country Name (2 letter code)
countryName_default             = KR
countryName_min                 = 2
countryName_max                 = 2

# ํšŒ์‚ฌ๋ช… ์ž…๋ ฅ
organizationName              = Organization Name (eg, company)
organizationName_default      = lesstif Inc.
ย 
# ๋ถ€์„œ ์ž…๋ ฅ
organizationalUnitName          = Organizational Unit Name (eg, section)
organizationalUnitName_default  = lesstif SSL Project
ย 
# SSL ์„œ๋น„์Šคํ•  domain ๋ช… ์ž…๋ ฅ
commonName                      = Common Name (eg, your name or your server's hostname)
commonName_default             = lesstif.com
commonName_max                  = 64


์ธ์ฆ์„œ ๋ฐœ๊ธ‰ ์š”์ฒญ(CSR) ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค.

openssl req -new -key lesstif.com.key -out lesstif.com.csr -config host_openssl.conf



SSL ์ธ์ฆ์„œ ์š”์ฒญ
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) [KR]:
Organization Name (eg, company) [lesstif Inc]:lesstif's Self Signed CA
Common Name (eg, your name or your servers hostname) [lesstif.com]:*.lesstif.com


5๋…„์งœ๋ฆฌ lesstif.com ์šฉ SSL ์ธ์ฆ์„œ ๋ฐœ๊ธ‰ (์„œ๋ช…์‹œ ROOT CA ๊ฐœ์ธํ‚ค๋กœ ์„œ๋ช…)

openssl x509 -req -days 1825 -extensions v3_user -in lesstif.com.csr \
-CA lesstif-rootca.crt -CAcreateserial \
-CAkey  lesstif-rootca.key \
-out lesstif.com.crt  -extfile host_openssl.conf


์ œ๋Œ€๋กœ ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ์„ ์œ„ํ•ด ์ธ์ฆ์„œ์˜ ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•ด ๋ณธ๋‹ค.

openssl x509 -text -in lesstif.com.crt


๊ฒ€์ฆ์ด ๋๋‚ฌ์œผ๋ฉด web server ์—์„œ ์ฝ์„์ˆ˜ ์žˆ๋„๋ก ์‹œ์Šคํ…œ์˜ ํ‘œ์ค€ ๊ฐœ์ธํ‚ค์™€ ์ธ์ฆ์„œ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋ณต์‚ฌํ•ด ์ค€๋‹ค.

cp lesstif.com.crt ย /etc/pki/tls/certs/
cp lesstif.com.key /etc/pki/tls/private/