Linux [Apache 2.x] (CentOS 6.8) 에 SSL 인증서 적용
페이지 정보
본문
Ⅰ. Apache 2.x에 대한 인증서 서명 요청(CSR) 생성
1. 서버의 터미널(SSH)에 로그인합니다.
2. 프롬프트에 다음 명령을 입력합니다.
[root@localhost /] cd /etc/pki/tls/private
[root@localhost /] openssl req -new -newkey rsa:2048 -nodes -keyout yourdomain.com.key -out yourdomain.com.csr
Generating a 2048 bit RSA private key
................+++
..................................................................................................+++
writing new private key to 'yourdomain.com.key'
-----
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) [XX]:KR
State or Province Name (full name) []:Seoul
Locality Name (eg, city) [Default City]:Gurogu
Organization Name (eg, company) [Default Company Ltd]:MyCompanyName
Organizational Unit Name (eg, section) []:DepartmentName
Common Name (eg, your name or your server's hostname) []:yourdomain.com
Email Address []:yourmail@yourdomain.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:비밀번호
An optional company name []:
i. Country Name (2 letter code) [XX]
국가: 조직이 법적으로 등록된 국가의 국제 표준화 기구(ISO) 형식의 2자리 국가 코드.
ii. State or Province Name (full name) []:
주 또는 도: 조직이 위치한 주 또는 도의 이름. 줄여쓰지 마십시오.
iii. Locality Name (eg, city) [Default City]
도시 또는 지역: 조직이 등록되거나 위치한 도시의 이름. 줄여쓰지 마십시오.
iv. Organization Name (eg, company) [Default Company Ltd]
조직: 법적으로 등록된 회사 이름. 개인으로 등록하는 경우 인증서 요청자의 이름을 입력합니다.
v. Organizational Unit Name (eg, section) []
팀명 또는 부서 <영문:Web Service Team>
vi. Common Name (eg, your name or your server's hostname) []
서비스 도메인명 <도메인명: happyjung.com >
와일드카드 인증서를 요청하는 경우 와일드카드가 필요한 일반 이름의 왼쪽에 별표(*)를 추가합니다.
예: *.coolexample.com.
vii. Email Address []
도메인소유자 이메일 <이메일: admin@yourdomain.com >
viii. A challenge password []:
SSL에 대해 암호를 입력하지 않으려면 암호 필드를 비워두십시오. 하지만 더 위험할 수도 있습니다.
3. 텍스트 편집기에서 yourdomain.com.csr 을 열고 모든 텍스트를 복사합니다.
4. 복사한 CSR를 SSL 발급업체의 지정된 CSR 입력창에 붙여넣습니다.
5. SSL 인증서 파일 및 인증서 번들 파일을 Apache 서버에 복사합니다.
업로드경로 : /etc/pki/tls/certs/
Ⅱ. SSL 설정
1. Apache 버전 확인
[root@localhost /]# httpd -v
Server version: Apache/2.2.15 (Unix)
Server built: ...
2. 암호화 모듈 설치 확인
[root@localhost /]# httpd -l
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c
3. Apache 버전에 따른 SSL 설정파일
3-1. Apache 1.x 일때
[root@localhost /]# find / -name httpd.conf -print
/etc/httpd/conf/httpd.conf
3-2. Apache 2.x 일때
[root@localhost /]# find / -name ssl.conf -print
/etc/httpd/conf.d/ssl.conf
3-3. Apache 2.2.x 일때
[root@localhost /]# find / -name httpd-ssl.conf -print
4. SSL 인증파일을 서버에 업로드 합니다.
/etc/pki/tls/certs/*.crt
/etc/pki/tls/private/도메인.csr
/etc/pki/tls/private/도메인.key
5. ssl.conf 설정 수정
[root@localhost /]# vi /etc/httpd/conf.d/ssl.conf
5-1. 도메인주소
#DocumentRoot "/var/www/html"
#ServerName www.example.com:443
를 변경
DocumentRoot "/home/happyjung/public_html"
Servernqame www.happyjung.com:433
5-2. 인증서 파일 경로
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
를 변경
#SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateFile /etc/pki/tls/certs/도메인.crt
5-3. 키 파일 경로
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
를 변경
#SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
SSLCertificateKeyFile /etc/pki/tls/private/도메인.key
5-4. 중간 번들 경로
#SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt
를 변경
#SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt
SSLCertificateChainFile /etc/pki/tls/certs/gd_bundle-g2-g1.crt # GoDaddy 에서 제공하는 번들
5-6. 인증암호 경로지정
SSLPassPhraseDialog builtin
를 변경
#SSLPassPhraseDialog builtin
SSLPassPhraseDialog exec:/etc/httpd/conf.d/ssl.pass
6. ssl 실행암호 파일 만들기
위에서 SSLPassPhraseDialog 설정을 추가했었는데 거기서 지정한 파일을 다음과 같이 만든다.
#!/bin/sh
echo "암호"
즉 이 파일을 실행하면 암호가 입력되도록 하는 것입니다.
이 파일 만든 다음에 꼭 실행 권한을 줍니다. 그래야 httpd가 이 파일을 실행해서 암호를 입력 받습니다.
그렇지 않으면 httpd가 작동하지 않습니다.
[root@localhost /]# chmod 755 /etc/httpd/conf.d/ssl.pass
7. 문법오류 검사
[root@localhost /]# /etc/init.d/httpd configtest
Syntax OK
[root@localhost /]# /usr/sbin/httpd -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
_default_:443 localhost (/etc/httpd/conf.d/ssl.conf:74)
*:80 is a NameVirtualHost
default server happyjung1.com (/etc/httpd/conf/httpd.conf:1012)
port 80 namevhost happyjung1.com (/etc/httpd/conf/httpd.conf:1012)
alias www.happyjung1.com
port 80 namevhost happyjung2.com (/etc/httpd/conf/httpd.conf:1019)
alias www.happyjung2.com
Syntax OK
8. Apache 재시작
[root@localhost /]# service httpd restart
9. SSL 포트가 정상작동하는지 확인
[root@localhost /]# netstat -na | grep 443
tcp 0 0 :::443 :::* LISTEN
10. apache 에서 모든 URL을 강제로 https 로 변경 ( Redirect Request to SSL )
VirtualHost 설정 내용에 Redirect 내용 명령어 추가
[root@localhost /]# vi /etc/httpd/conf/httpd.conf
<VirtualHost *:80>
DocumentRoot /home/happyjung/public_html
ServerName happyjung.com
ServerAlias www.happyjung.com
ErrorLog logs/happyjung.com-error_log
CustomLog logs/happyjung.com-access_log combined
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
</IfModule>
</VirtualHost>
11. SSL VirtualHost 추가 ... <향후 테스트후 내용 수정예정>
<VirtualHost _default_:443>
DocumentRoot "/var/www/html"
ServerName www.example.com
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn
# SSL Engine Switch:
SSLEngine on
# SSL Protocol support:
SSLProtocol all -SSLv2
# SSL Cipher Suite:
SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES
# Server Certificate:
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
# Server Private Key:
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
# Server Certificate Chain:
SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt
# Certificate Authority (CA):
#SSLCACertificateFile /etc/pki/tls/certs/ca-bundle.crt
# Client Authentication (Type):
#SSLVerifyClient require
#SSLVerifyDepth 10
# Access Control:
#<Location />
#SSLRequire ( %{SSL_CIPHER} !~ m/^(EXP|NULL)/ \
# and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \
# and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"} \
# and %{TIME_WDAY} >= 1 and %{TIME_WDAY} <= 5 \
# and %{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 20 ) \
# or %{REMOTE_ADDR} =~ m/^192\.76\.162\.[0-9]+$/
#</Location>
# SSL Engine Options:
#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
<Files ~ "\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
<Directory "/var/www/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
# SSL Protocol Adjustments:
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
# Per-Server Logging:
CustomLog logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>
관련사이트
http://www.comodossl.co.kr/Certificate/InstallGuide/Apache.htm
한국정보보호진흥원 : 보안서버 구축가이드
https://kr.godaddy.com/help/apachecentos-ssl-5238
http://whiteship.me/?p=13580
http://verynyang.tistory.com/1
https://www.happyjung.com/lecture/1355
[한국전자인증] Apache Server 인증서 설치(2011).pdf
http://whiteship.me/?p=13580
http://www.cyberciti.biz/faq/warn-_default_-virtualhost-overlap-port80-first-hasprecedence/
https://kr.godaddy.com/help/csr-apache-2x-5269
https://kr.godaddy.com/help/apachecentos-ssl-5238
http://blog.naver.com/ncloud24/220713966597
http://taesachi.com/?p=6
1. 서버의 터미널(SSH)에 로그인합니다.
2. 프롬프트에 다음 명령을 입력합니다.
[root@localhost /] cd /etc/pki/tls/private
[root@localhost /] openssl req -new -newkey rsa:2048 -nodes -keyout yourdomain.com.key -out yourdomain.com.csr
Generating a 2048 bit RSA private key
................+++
..................................................................................................+++
writing new private key to 'yourdomain.com.key'
-----
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) [XX]:KR
State or Province Name (full name) []:Seoul
Locality Name (eg, city) [Default City]:Gurogu
Organization Name (eg, company) [Default Company Ltd]:MyCompanyName
Organizational Unit Name (eg, section) []:DepartmentName
Common Name (eg, your name or your server's hostname) []:yourdomain.com
Email Address []:yourmail@yourdomain.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
i. Country Name (2 letter code) [XX]
국가: 조직이 법적으로 등록된 국가의 국제 표준화 기구(ISO) 형식의 2자리 국가 코드.
ii. State or Province Name (full name) []:
주 또는 도: 조직이 위치한 주 또는 도의 이름. 줄여쓰지 마십시오.
iii. Locality Name (eg, city) [Default City]
도시 또는 지역: 조직이 등록되거나 위치한 도시의 이름. 줄여쓰지 마십시오.
iv. Organization Name (eg, company) [Default Company Ltd]
조직: 법적으로 등록된 회사 이름. 개인으로 등록하는 경우 인증서 요청자의 이름을 입력합니다.
v. Organizational Unit Name (eg, section) []
팀명 또는 부서 <영문:Web Service Team>
vi. Common Name (eg, your name or your server's hostname) []
서비스 도메인명 <도메인명: happyjung.com >
와일드카드 인증서를 요청하는 경우 와일드카드가 필요한 일반 이름의 왼쪽에 별표(*)를 추가합니다.
예: *.coolexample.com.
vii. Email Address []
도메인소유자 이메일 <이메일: admin@yourdomain.com >
viii. A challenge password []:
SSL에 대해 암호를 입력하지 않으려면 암호 필드를 비워두십시오. 하지만 더 위험할 수도 있습니다.
3. 텍스트 편집기에서 yourdomain.com.csr 을 열고 모든 텍스트를 복사합니다.
4. 복사한 CSR를 SSL 발급업체의 지정된 CSR 입력창에 붙여넣습니다.
5. SSL 인증서 파일 및 인증서 번들 파일을 Apache 서버에 복사합니다.
업로드경로 : /etc/pki/tls/certs/
Ⅱ. SSL 설정
1. Apache 버전 확인
[root@localhost /]# httpd -v
Server version: Apache/2.2.15 (Unix)
Server built: ...
2. 암호화 모듈 설치 확인
[root@localhost /]# httpd -l
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c
3. Apache 버전에 따른 SSL 설정파일
3-1. Apache 1.x 일때
[root@localhost /]# find / -name httpd.conf -print
/etc/httpd/conf/httpd.conf
3-2. Apache 2.x 일때
[root@localhost /]# find / -name ssl.conf -print
/etc/httpd/conf.d/ssl.conf
[root@localhost /]# find / -name httpd-ssl.conf -print
4. SSL 인증파일을 서버에 업로드 합니다.
/etc/pki/tls/certs/*.crt
/etc/pki/tls/private/도메인.csr
/etc/pki/tls/private/도메인.key
5. ssl.conf 설정 수정
Apache 버전 2.4.8 미만 | |
---|---|
지시문 | 입력할 경로 |
SSLCertificateFile | 인증서 파일 경로 |
SSLCertificateKeyFile | 키 파일 경로 |
SSLCertificateChainFile | 중간 번들 경로 |
Apache 버전 2.4.8 이상 | |
---|---|
지시문 | 입력할 경로 |
SSLCertificateFile | 인증서 파일 경로 |
SSLCertificateKeyFile | 키 파일 경로 |
SSLCACertificatePath | 중간 번들 경로 |
[root@localhost /]# vi /etc/httpd/conf.d/ssl.conf
5-1. 도메인주소
#DocumentRoot "/var/www/html"
#ServerName www.example.com:443
를 변경
DocumentRoot "/home/happyjung/public_html"
Servernqame www.happyjung.com:433
5-2. 인증서 파일 경로
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
를 변경
#SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateFile /etc/pki/tls/certs/도메인.crt
5-3. 키 파일 경로
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
를 변경
#SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
SSLCertificateKeyFile /etc/pki/tls/private/도메인.key
5-4. 중간 번들 경로
#SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt
를 변경
#SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt
SSLCertificateChainFile /etc/pki/tls/certs/gd_bundle-g2-g1.crt # GoDaddy 에서 제공하는 번들
SSLPassPhraseDialog builtin
를 변경
#SSLPassPhraseDialog builtin
SSLPassPhraseDialog exec:/etc/httpd/conf.d/ssl.pass
위에서 SSLPassPhraseDialog 설정을 추가했었는데 거기서 지정한 파일을 다음과 같이 만든다.
#!/bin/sh
echo "암호"
즉 이 파일을 실행하면 암호가 입력되도록 하는 것입니다.
이 파일 만든 다음에 꼭 실행 권한을 줍니다. 그래야 httpd가 이 파일을 실행해서 암호를 입력 받습니다.
그렇지 않으면 httpd가 작동하지 않습니다.
[root@localhost /]# chmod 755 /etc/httpd/conf.d/ssl.pass
7. 문법오류 검사
[root@localhost /]# /etc/init.d/httpd configtest
Syntax OK
[root@localhost /]# /usr/sbin/httpd -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
_default_:443 localhost (/etc/httpd/conf.d/ssl.conf:74)
*:80 is a NameVirtualHost
default server happyjung1.com (/etc/httpd/conf/httpd.conf:1012)
port 80 namevhost happyjung1.com (/etc/httpd/conf/httpd.conf:1012)
alias www.happyjung1.com
port 80 namevhost happyjung2.com (/etc/httpd/conf/httpd.conf:1019)
alias www.happyjung2.com
Syntax OK
8. Apache 재시작
[root@localhost /]# service httpd restart
9. SSL 포트가 정상작동하는지 확인
[root@localhost /]# netstat -na | grep 443
tcp 0 0 :::443 :::* LISTEN
10. apache 에서 모든 URL을 강제로 https 로 변경 ( Redirect Request to SSL )
VirtualHost 설정 내용에 Redirect 내용 명령어 추가
[root@localhost /]# vi /etc/httpd/conf/httpd.conf
<VirtualHost *:80>
DocumentRoot /home/happyjung/public_html
ServerName happyjung.com
ServerAlias www.happyjung.com
ErrorLog logs/happyjung.com-error_log
CustomLog logs/happyjung.com-access_log combined
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
</IfModule>
</VirtualHost>
11. SSL VirtualHost 추가 ... <향후 테스트후 내용 수정예정>
<VirtualHost _default_:443>
DocumentRoot "/var/www/html"
ServerName www.example.com
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn
# SSL Engine Switch:
SSLEngine on
# SSL Protocol support:
SSLProtocol all -SSLv2
# SSL Cipher Suite:
SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES
# Server Certificate:
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
# Server Private Key:
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
# Server Certificate Chain:
SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt
# Certificate Authority (CA):
#SSLCACertificateFile /etc/pki/tls/certs/ca-bundle.crt
# Client Authentication (Type):
#SSLVerifyClient require
#SSLVerifyDepth 10
# Access Control:
#<Location />
#SSLRequire ( %{SSL_CIPHER} !~ m/^(EXP|NULL)/ \
# and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \
# and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"} \
# and %{TIME_WDAY} >= 1 and %{TIME_WDAY} <= 5 \
# and %{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 20 ) \
# or %{REMOTE_ADDR} =~ m/^192\.76\.162\.[0-9]+$/
#</Location>
# SSL Engine Options:
#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
<Files ~ "\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
<Directory "/var/www/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
# SSL Protocol Adjustments:
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
# Per-Server Logging:
CustomLog logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>
관련사이트
http://www.comodossl.co.kr/Certificate/InstallGuide/Apache.htm
한국정보보호진흥원 : 보안서버 구축가이드
https://kr.godaddy.com/help/apachecentos-ssl-5238
http://whiteship.me/?p=13580
http://verynyang.tistory.com/1
https://www.happyjung.com/lecture/1355
[한국전자인증] Apache Server 인증서 설치(2011).pdf
http://whiteship.me/?p=13580
http://www.cyberciti.biz/faq/warn-_default_-virtualhost-overlap-port80-first-hasprecedence/
https://kr.godaddy.com/help/csr-apache-2x-5269
https://kr.godaddy.com/help/apachecentos-ssl-5238
http://blog.naver.com/ncloud24/220713966597
http://taesachi.com/?p=6
댓글목록
등록된 댓글이 없습니다.