-
[Linux] OpenSSL 을 이용하여 https 서버 구축Linux 2017. 9. 24. 13:05
ROOT CA 인증서 생성
1. CA 가 사용할 RSA public, private key 생성
openssl genrsa -aes256 -out /etc/pki/tls/private/lesstif-rootca.key 2048
2. 개인키 권한 설정
chmod 600 /etc/pki/tls/private/lesstif-rootca.key
3. CSR 생성을 위한 설정파일 생성
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
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.
# SSL 서비스할 domain 명 입력
commonName = Common Name (eg, your name or your server's hostname)
commonName_default = lesstif's Self Signed CA
commonName_max = 64
4. 인증서 요청
openssl req -new -key /etc/pki/tls/private/lesstif-rootca.key -out /etc/pki/tls/certs/lesstif-rootca.csr -config rootca_openssl.conf
5. self-signed 인증서 생성
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 \
-extfile rootca_openssl.conf
기본 값은 sha256이고 -sha384, -sha512 옵션을 지정하여 해시 알고리즘을 바꿔줄 수 있습니다.
SSL 인증서 생성
1. SSL 호스트에서 사용할 RSA public, private key 생성 (2048 bit)
openssl genrsa -aes256 -out /etc/pki/tls/private/lesstif.com.key 2048
2. 개인키 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
# chmod 600 /etc/pki/tls/private/lesstif.com.key*
3. CSR 생성을 위해 설정파일 생성
[ req ]
default_bits = 2048
default_md = sha1
default_keyfile = lesstif-rootca.key
distinguished_name = req_distinguished_name
extensions = v3_user
[ v3_user ]
basicConstraints = CA:FALSE
authorityKeyIdentifier = keyid,issuer
subjectKeyIdentifier = hash
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth,clientAuth
subjectAltName = @alt_names
[ alt_names]
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
4. SSL 인증서 요청
openssl req -new -key /etc/pki/tls/private/lesstif.com.key -out /etc/pki/tls/certs/lesstif.com.csr -config host_openssl.conf
5. SSL 인증서 발급
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
여기까지가 SSL 인증서 발급 과정이고 이제 이걸 apache에 적용해야 합니다.
Apache 웹서버 에 SSL 적용
1. mod_ssl 설치
yum -y install mod_ssl
2. 위와 같은 방법으로 SSL인증서와 개인키를 발급받으셨다면 /etc/pki/tls/certs/lesstif.com.crt, /etc/pki/tls/private/lesstif.com.key 이 경로에 있습니다.
이 파일의 위치를 설정 파일에 지정해주면 됩니다
# vi /etc/httpd/conf.d/ssl.conf
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
## 위에서 생성한 SSL 인증서와 개인키
SSLCertificateFile /etc/pki/tls/certs/lesstif.com.crt
SSLCertificateKeyFile /etc/pki/tls/private/lesstif.com.key
SSLCACertificateFile /etc/pki/tls/certs/lesstif-rootca.crt
<Files ~ "\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
<Directory "/var/www/cgi-bin">
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>
3. 그리고 나서 apache 를 재시작해줍니다.
# systemctl restart httpd
4. 웹브라우저에서 https로 접속해서 잘 보이는지 확인하고 브라우저에 '신뢰하는 인증서 추가' 를 해줍니다
'Linux' 카테고리의 다른 글
[Linux] ELK (Elasticsearch + Logstash + Kibana) 설치 (0) 2017.12.01 [Linux] Mysql Group Replication (0) 2017.09.29 [Linux] 가상 호스트 (VirtualHost) 설정 (0) 2017.09.24 [Linux] VirtualBox 공유폴더 설정 (게스트 확장 설치) (0) 2017.09.24 [Linux] CentOS7 에 APM(Apache + PHP + Mysql) + Wordpress 설치 (0) 2017.09.24