ÃֽŠ°Ô½Ã±Û(OS/WAS)
2018.10.18 / 15:18

OpenSSL ·Î ROOT CA »ý¼º ¹× SSL ÀÎÁõ¼­ ¹ß±Þ

hanulbit
Ãßõ ¼ö 123

°³¿ä

À¥¼­ºñ½º¿¡ https ¸¦ Àû¿ëÇÒ °æ¿ì SSL ÀÎÁõ¼­¸¦ VeriSign À̳ª Thawte, GeoTrust µî¿¡¼­ ÀÎÁõ¼­¸¦ ¹ß±Þ¹Þ¾Æ¾ß ÇÏÁö¸¸ ºñ¿ëÀÌ ¹ß»ýÇϹǷΠ½ÇÁ¦ ¿î¿µ ¼­¹ö°¡ ¾Æ´Ï¸é ¹ß±Þ ¹Þ´Âµ¥ ºÎ´ãÀÌ µÉ ¼ö ÀÖ´Ù.

ÀÌ·²¶§ OpenSSL À» ÀÌ¿ëÇÏ¿© ÀÎÁõ±â°üÀ» ¸¸µé°í Self signed certificate ¸¦ »ý¼ºÇÏ°í SSL ÀÎÁõ¼­¸¦ ¹ß±ÞÇÏ´Â ¹ýÀ» Á¤¸®ÇØ º»´Ù.

¹ß±ÞµÈ SSL ÀÎÁõ¼­´Â apache httpd µîÀÇ Web Server ¿¡ ¼³Ä¡ÇÏ¿© ¼Õ½±°Ô https ¼­ºñ½º¸¦ Á¦°øÇÒ ¼ö ÀÖ´Ù.


Self Signed Certificate(SSC)¶õ ?

ÀÎÁõ¼­(digital certificate)´Â °³ÀÎÅ° ¼ÒÀ¯ÀÚÀÇ °ø°³Å°(public key)¿¡ ÀÎÁõ±â°üÀÇ °³ÀÎÅ°·Î ÀüÀÚ¼­¸íÇÑ µ¥ÀÌŸ´Ù. ¸ðµç ÀÎÁõ¼­´Â ¹ß±Þ±â°ü(CA) ÀÌ ÀÖ¾î¾ß Çϳª ÃÖ»óÀ§¿¡ ÀÖ´Â ÀÎÁõ±â°ü(root ca)Àº ¼­¸íÇØÁÙ »óÀ§ ÀÎÁõ±â°üÀÌ ¾øÀ¸¹Ç·Î root caÀÇ °³ÀÎÅ°·Î ½º½º·ÎÀÇ ÀÎÁõ¼­¿¡ ¼­¸íÇÏ¿© ÃÖ»óÀ§ ÀÎÁõ±â°ü ÀÎÁõ¼­¸¦ ¸¸µç´Ù. ÀÌ·¸°Ô ½º½º·Î ¼­¸íÇÑ ROOT CA ÀÎÁõ¼­¸¦ Self Signed Certificate ¶ó°í ºÎ¸¥´Ù.

IE, FireFox, Chrome µîÀÇ Web Browser Á¦ÀÛ»ç´Â VeriSign À̳ª comodo °°Àº À¯¸í ROOT CA µéÀÇ ÀÎÁõ¼­¸¦ ½Å·ÚÇÏ´Â CA·Î ¹Ì¸® µî·ÏÇØ ³õÀ¸¹Ç·Î Àú·± ±â°ü¿¡¼­ ¹ß±ÞµÈ SSL ÀÎÁõ¼­¸¦ »ç¿ëÇØ¾ß browser ¿¡¼­´Â ÇØ´ç SSL ÀÎÁõ¼­¸¦ ½Å·ÚÇÒ¼ö Àִµ¥

OpenSSL ·Î ¸¸µç ROOT CA¿Í SSL ÀÎÁõ¼­´Â Browser°¡ ¸ð¸£´Â ±â°üÀÌ ¹ß±ÞÇÑ ÀÎÁõ¼­À̹ǷΠº¸¾È °æ°í¸¦ ¹ß»ý½Ãų °ÍÀ̳ª Å×½ºÆ® »ç¿ë¿¡´Â ÁöÀåÀÌ ¾ø´Ù.

ROOT CA ÀÎÁõ¼­¸¦ Browser¿¡ Ãß°¡ÇÏ¿© º¸¾È °æ°í¸¦ ¹ß»ý½ÃÅ°Áö ¾ÊÀ¸·Á¸é Browser ¿¡ SSL ÀÎÁõ¼­ ¹ß±Þ±â°ü Ãß°¡Çϱ⠸¦ Âü°íÇÏÀÚ.


CSR(Certificate Signing Request)˼?

°ø°³Å° ±â¹Ý(PKI)Àº private key(°³ÀÎÅ°)¿Í public key(°ø°³Å°)·Î ÀÌ·ç¾îÁ® ÀÖ´Ù. ÀÎÁõ¼­¶ó°í ÇÏ´Â °ÍÀº ³» °ø°³Å°°¡ ¸Â´Ù°í ÀÎÁõ±â°ü(CA)ÀÌ ÀüÀÚ¼­¸íÇÏ¿© ÁÖ´Â °ÍÀÌ¸ç ³ª¿Í º¸¾È Åë½ÅÀ» ÇÏ·Á´Â ´ç»çÀÚ´Â ³» ÀÎÁõ¼­¸¦ ±¸Çؼ­ ±× ¾È¿¡ ÀÖ´Â °ø°³Å°¸¦ ÀÌ¿ëÇÏ¿© º¸¾È Åë½ÅÀ» ÇÒ ¼ö ÀÖ´Ù.

CSR Àº ÀÎÁõ±â°ü¿¡ ÀÎÁõ¼­ ¹ß±Þ ¿äûÀ» Çϴ Ưº°ÇÑ 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 /etc/pki/tls/private/lesstif-rootca.key 2048

    °³ÀÎÅ° ºÐ½Ç¿¡ ´ëºñÇØ AES 256bit ·Î ¾ÏȣȭÇÑ´Ù. AES À̹ǷΠ¾ÏÈ£(pass phrase)¸¦ ºÐ½ÇÇÏ¸é °³ÀÎÅ°¸¦ ¾òÀ»¼ö ¾øÀ¸´Ï ²À ±â¾ïÇØ¾ß ÇÑ´Ù.

  2. °³ÀÎÅ° ±ÇÇÑ ¼³Á¤

    º¸¾È °æ°í

    °³ÀÎÅ°ÀÇ À¯Ãâ ¹æÁö¸¦ À§ÇØ group °ú otherÀÇ permission À» ¸ðµÎ Á¦°ÅÇÑ´Ù.

    chmod 600  /etc/pki/tls/private/lesstif-rootca.key

  3. CSR(Certificate Signing Request) »ý¼ºÀ» À§ÇÑ 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@lesstif:~:> openssl req -new -key /etc/pki/tls/private/lesstif-rootca.key -out /etc/pki/tls/certs/lesstif-rootca.csr -config rootca_openssl.conf
    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 ÀÎÁõ¼­ »ý¼º

    -extensions v3_ca ¿É¼ÇÀ» Ãß°¡ÇØ¾ß ÇÑ´Ù.
    openssl x509 -req \
    -days 3650 \
    -extensions v3_ca \
    -set_serial 1 \
    -in /etc/pki/tls/certs/lesstif-rootca.csr \
    -signkey /etc/pki/tls/private/lesstif-rootca.key \
    -out /etc/pki/tls/certs/lesstif-rootca.crt \

    ¼­¸í¿¡ »ç¿ëÇÒ Çؽà ¾Ë°í¸®ÁòÀ» º¯°æÇÏ·Á¸é -sha256, -sha384, -sha512 Ã³·³ Çؽø¦ ÁöÁ¤ÇÏ´Â ¿É¼ÇÀ» Àü´ÞÇØ ÁØ´Ù.

    ±âº»°ªÀº -sha256 À̸ç openssl 1.0.2 ÀÌ»óÀÌ ÇÊ¿ä

  5. Á¦´ë·Î »ý¼ºµÇ¾ú´ÂÁö È®ÀÎÀ» À§ÇØ ÀÎÁõ¼­ÀÇ Á¤º¸¸¦ Ãâ·ÂÇØ º»´Ù.

    openssl x509 -text -in /etc/pki/tls/certs/lesstif-rootca.crt


SSL ÀÎÁõ¼­ »ý¼º

À§¿¡¼­ »ý¼ºÇÑ root ca ¼­¸íÅ°·Î SSL ÀÎÁõ¼­¸¦ ¹ß±ÞÇØ º¸ÀÚ

  1. SSL È£½ºÆ®¿¡¼­ »ç¿ëÇÒ RSA  key pair(public, private key) »ý¼º

    2048bit °³ÀÎÅ° »ý¼º
    openssl genrsa -aes256 -out /etc/pki/tls/private/lesstif.com.key 2048
  2. Remove Passphrase from key

    °³ÀÎÅ°¸¦ º¸È£Çϱâ À§ÇØ Key-Derived Function À¸·Î °³ÀÎÅ° ÀÚü°¡ ¾ÏȣȭµÇ¾î ÀÖ´Ù. ÀÎÅÍ³Ý ¹ðÅ·µî¿¡ »ç¿ëµÇ´Â °³Àοë ÀÎÁõ¼­´Â ´ç¿¬È÷ Àú·¸°Ô º¸È£µÇ¾î¾ß ÇÏÁö¸¸ SSL ¿¡ »ç¿ëÇÏ·Á´Â Å°°¡ ¾ÏÈ£°¡ °É·ÁÀÖÀ¸¸é httpd ±¸µ¿¶§¸¶´Ù pass phrase ¸¦ ÀÔ·ÂÇØ¾ß ÇϹǷΠ¾ÏÈ£¸¦ Á¦°ÅÇÑ´Ù.

    °³ÀÎÅ° pass phrase Á¦°Å
    cp  /etc/pki/tls/private/lesstif.com.key  /etc/pki/tls/private/lesstif.com.key.enc
    openssl rsa -in  /etc/pki/tls/private/lesstif.com.key.enc -out  /etc/pki/tls/private/lesstif.com.key

    º¸¾È °æ°í

    °³ÀÎÅ°ÀÇ À¯Ãâ ¹æÁö¸¦ À§ÇØ group °ú otherÀÇ permission À» ¸ðµÎ Á¦°ÅÇÑ´Ù.

    chmod 600  /etc/pki/tls/private/lesstif.com.key*

  3. CSR(Certificate Signing Request) »ý¼ºÀ» À§ÇÑ 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 Ã³·³ ¾µ ¼ö ÀÖ´Ù.
     
    [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
    SSL ÀÎÁõ¼­ ¿äû
    root@lesstif:~:> openssl req -new  -key /etc/pki/tls/private/lesstif.com.key -out /etc/pki/tls/certs/lesstif.com.csr -config host_openssl.conf
    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
  4. 5³âÂ¥¸® lesstif.com ¿ë SSL ÀÎÁõ¼­ ¹ß±Þ (¼­¸í½Ã ROOT CA °³ÀÎÅ°·Î ¼­¸í)

    openssl x509 -req -days 1825 -extensions v3_user -in /etc/pki/tls/certs/lesstif.com.csr \
    -CA /etc/pki/tls/certs/lesstif-rootca.crt -CAcreateserial \
    -CAkey  /etc/pki/tls/private/lesstif-rootca.key \
    -out /etc/pki/tls/certs/lesstif.com.crt  -extfile host_openssl.conf
  5. Á¦´ë·Î »ý¼ºµÇ¾ú´ÂÁö È®ÀÎÀ» À§ÇØ ÀÎÁõ¼­ÀÇ Á¤º¸¸¦ Ãâ·ÂÇØ º»´Ù.

    openssl x509 -text -in /etc/pki/tls/certs/lesstif.com.crt