본문 바로가기

가상머신 환경 세팅

openssl을 사용해서 https 페이지 만들기.

이번에는 워드프레스 홈페이지를 HTTPS통신을 하게 만들어봅시다. 


https://www.lesstif.com/pages/viewpage.action?pageId=6979614 이 홈페이지글을 기반으로 썼습니다.



일단 openssl을 사용해서 rootca 인증서를 생성해보자,.



openssl genrsa -aes256 -out /etc/pki/tls/private/hasi-rootca.key 2048


뒷부분 hasi-rootca.key는 파일명이므로 임의로 설정해도 됩니다,

자신의 키값을 설정해줍시다.



그다음. 키는 그룹이나 다른 사용자가 읽고 쓰고 접근을 방지하기 위해 접근권한을 바꿔즙니다.

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



ls -la로 확인해보면 권한이 바뀐것을 볼 수 있습니다.



그다음 cd   /etc/pki/tls/private를 하고 vi rootca_opssl.conf로 새로 문서를 만들어줍니다.




[ req ]

default_bits            = 2048

default_md              = sha1

default_keyfile         = hasi-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      = hasi 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             = hasi's Self Signed CA

commonName_max                  = 64  


파일 내에 다음과 작성하고 저장하고 나옵니다.



그다음은 인증서를 이제 만듭니다.

openssl req -new -key /etc/pki/tls/private/hasi-rootca.key -out /etc/pki/tls/certs/hasi-rootca.csr -config rootca_openssl.conf


입력하시면 위에 설정에서 입력한 국가와 회사 설정이 되있는 상태로 나오는데 엔터를 눌러줍니다.



그리고 다음과 같이 입력합니다.

openssl x509 -req \

-days 3650 \

-extensions v3_ca \

-set_serial 1 \

-in /etc/pki/tls/certs/hasi-rootca.csr \

-signkey /etc/pki/tls/private/hasi-rootca.key \

-out /etc/pki/tls/certs/hasi-rootca.crt \

-extfile rootca_openssl.conf


뒤에 \는 명령어가 길때 다음줄로 내리는거 아시죠?



생성된 인증서가 잘 되었는지 확인해봅시다.

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




다음은 SSL인증서를 만듭니다. 과정은 위와 유사합니다.



openssl genrsa -aes256 -out /etc/pki/tls/private/gachon.com.key 2048


워드프레스의 도메인인 gachon.com으로 저는 만들었습니다.



다음은 Passphrase 를 제거하기 위해서 다음과 같이입력합니다.

cp  /etc/pki/tls/private/lesstif.com.key  /etc/pki/tls/private/gachon.com.key.enc

openssl rsa -in  /etc/pki/tls/private/lesstif.com.key.enc -out  /etc/pki/tls/private/gachon.com.key

우리가 사용하는 개인용 인증서 같은 경우에는 보호가 되어야 하지만 SSL에서 사용할때는 http서비스가 시작할때마다 헤제해야하는 번거로움이 있어서 아예 제거합시다. 




다음은 host_openssl.conf 파일을 만들어줍니다. 역시 vi host_openssl.conf입력합니다.



[ req ]

default_bits            = 2048

default_md              = sha1

default_keyfile         = hasi-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 의 도메인 이름을 적어준다.

DNS.1   = www.gachon.com

DNS.2   = gachon.com

DNS.3   = *.gachon.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      = gachon Inc.

  

# 부서 입력

organizationalUnitName          = Organizational Unit Name (eg, section)

organizationalUnitName_default  = gachon SSL Project

  

# SSL 서비스할 domain 명 입력

commonName                      = Common Name (eg, your name or your server's hostname)

commonName_default             = gachon.com

commonName_max                  = 64 

위와 같이 입력하고 저장하고 나옵니다.



다음 SSL 인증서를 요청합시다.

openssl req -new  -key /etc/pki/tls/private/gachon.com.key -out /etc/pki/tls/certs/gachon.com.csr -config host_openssl.conf

입력합니다



그리고 5년짜리 SSL 인증서를 발급합시다.

openssl x509 -req -days 1825 -extensions v3_user -in /etc/pki/tls/certs/gachon.com.csr \

-CA /etc/pki/tls/certs/hasi-rootca.crt -CAcreateserial \

-CAkey  /etc/pki/tls/private/hasi-rootca.key \

-out /etc/pki/tls/certs/gachon.com.crt  -extfile host_openssl.conf





인증서가 잘 생성되었는지 확인 해봅시다.

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



이제 사이트에 적용해봅시다.



일단 mod_ssl을 다운받아주세요


yum -y install mod_ssl





다음은 ssl환경설정인 ssl.conf를 수정합니다


vi /etc/httpd/conf.d/ssl.conf



SSLCertificateFile에 gachon.com의 인증서를넣어줍니다

SSLCertificateFile /etc/pki/tls/cert/gachon.com.key



다음 Server Private Key에서  SSLCertificateKeyFile 에 도메인 키를 넣어줍시다


SSLCertificateKeyFile /etc/pki/tls/private/gachon.com.key



그리고 맨 밑에 다음과 같이 

<VirtualHost *:443>

  ServerName gachon.com

  ServerAlias www.gachon.com


  SSLEngine on

  SSLProtocol all -SSLv2

  SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW


  ## 위에서 생성한 SSL 인증서와 개인키

  SSLCertificateFile /etc/pki/tls/certs/gachon.com.crt

  SSLCertificateKeyFile /etc/pki/tls/private/gachon.com.key

  SSLCACertificateFile /etc/pki/tls/certs/hasi-root.crt


  ##

  <Files ~ "\.(cgi|shtml|phtml|php3?)$">

            SSLOptions +StdEnvVars

        </Files>

        <Directory "/var/www/html/wordpress">

            SSLOptions +StdEnvVars

        </Directory>

  SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown

 ErrorLog logs/example.com-ssl_error_log

  TransferLog logs/example.com-ssl_access_log

  LogLevel warn

  CustomLog logs/example.com-ssl_request_log \

   "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

</VirtualHost>









다음과 같이 설정하고 httpd를 재시작해줍니다


systemctl restart httpd






그러면 다음과 같이 https로 접속한 모습을 볼 수 있습니다.