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 ์ ๊ฐ์ธํค์ ์ธ์ฆ์๋ฅผ ๋ง๋ค์ด ๋ณด์
CA ๊ฐ ์ฌ์ฉํ RSA ย key pair(public, private key)ย ์์ฑ
2048bit ๊ฐ์ธํค ์์ฑopenssl genrsa -aes256 -out lesstif-rootca.key 2048
๊ฐ์ธํค ๋ถ์ค์ ๋๋นํด AES 256bit ๋ก ์ํธํํ๋ค. AES ์ด๋ฏ๋ก ์ํธ(pass phrase)๋ฅผ ๋ถ์คํ๋ฉด ๊ฐ์ธํค๋ฅผ ์ป์์ ์์ผ๋ ๊ผญ ๊ธฐ์ตํด์ผ ํ๋ค.
๊ฐ์ธํค ๊ถํ ์ค์
๋ณด์ ๊ฒฝ๊ณ
๊ฐ์ธํค์ ์ ์ถ ๋ฐฉ์ง๋ฅผ ์ํด ์์ ์๋ง ์ฝ์์ ์๋๋ก group ๊ณผ other์ permission ์ ๋ชจ๋ ์ ๊ฑฐํ๋๊ฒ ์ข๋ค.
chmod 600 lesstif-rootca.key
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
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 ์ด์์ด ํ์
์ ๋๋ก ์์ฑ๋์๋์ง ํ์ธ์ ์ํด ์ธ์ฆ์์ ์ ๋ณด๋ฅผ ์ถ๋ ฅํด ๋ณธ๋ค.
openssl x509 -text -in lesstif-rootca.crt
SSL ์ธ์ฆ์ ๋ฐ๊ธ
์์์ ์์ฑํ root ca ์๋ช ํค๋ก SSL ์ธ์ฆ์๋ฅผ ๋ฐ๊ธํด ๋ณด์
ํค ์ ์์ฑ
1.ย SSL ํธ์คํธ์์ ์ฌ์ฉํ RSA ย key pair(public, private key) ์์ฑ
openssl genrsa -aes256 -out lesstif.com.key 2048
2. Remove Passphrase from key
๊ฐ์ธํค๋ฅผ ๋ณดํธํ๊ธฐ ์ํด Key-Derived Function ์ผ๋ก ๊ฐ์ธํค ์์ฒด๊ฐ ์ํธํ๋์ด ์๋ค. ์ธํฐ๋ท ๋ฑ ํน๋ฑ์ ์ฌ์ฉ๋๋ ๊ฐ์ธ์ฉ ์ธ์ฆ์๋ ๋น์ฐํ ์ ๋ ๊ฒ ๋ณดํธ๋์ด์ผ ํ์ง๋ง SSL ์ ์ฌ์ฉํ๋ ค๋ ํค๊ฐ ์ํธ๊ฐ ๊ฑธ๋ ค์์ผ๋ฉด ์น ์๋ฒ ๊ตฌ๋๋๋ง๋ค 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(๋ณ๊ฒฝ ๊ฐ๋ฅ) ๋ผ๋ ์ด๋ฆ์ผ๋ก ์ ์ฅํ๋ค.
[ 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
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/
apache httpd ์ SSL ์ ์ฉ
apache httpd ์ SSL/HTTPS ์ ์ฉ ๋ฐ VirtualHost ์ SNI(Server Name Indication) ๋ฌธ์ ํด๊ฒฐ ์ฐธ๊ณ