편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.
최신판 | 당신의 편집 | ||
9번째 줄: | 9번째 줄: | ||
==확인== | ==확인== | ||
리눅스를 설치했다면 아마도 openssl 패키지가 설치되어 있을 것이다.<ref>리눅스는 SSH 접속을 기본 제공하는데, 거기에도 openssl이 필요하다. [[CentOS 6 최소 설치 패키지 목록]]에도 포함되어 있다.</ref> | 리눅스를 설치했다면 아마도 openssl 패키지가 설치되어 있을 것이다.<ref>리눅스는 SSH 접속을 기본 제공하는데, 거기에도 openssl이 필요하다. [[CentOS 6 최소 설치 패키지 목록]]에도 포함되어 있다.</ref> | ||
< | <source lang='console'> | ||
[root@zetawiki ~]# rpm -qa openssl | [root@zetawiki ~]# rpm -qa openssl | ||
openssl-1.0.0-20.el6_2.5.x86_64 | openssl-1.0.0-20.el6_2.5.x86_64 | ||
</ | </source> | ||
버전으로도 확인 가능 | 버전으로도 확인 가능 | ||
< | <source lang="console"> | ||
[root@zetawiki ~]# openssl version | [root@zetawiki ~]# openssl version | ||
</ | </source> | ||
==개인키 생성== | ==개인키 생성== | ||
< | <source lang='console'> | ||
[root@zetawiki ~]# openssl genrsa -des3 -out server.key 2048 | [root@zetawiki ~]# openssl genrsa -des3 -out server.key 2048 | ||
Generating RSA private key, 2048 bit long modulus | Generating RSA private key, 2048 bit long modulus | ||
28번째 줄: | 28번째 줄: | ||
Enter pass phrase for server.key: | Enter pass phrase for server.key: | ||
Verifying - Enter pass phrase for server.key: | Verifying - Enter pass phrase for server.key: | ||
</ | </source> | ||
:→ 서버 개인키인 server.key 파일이 생성된다. | :→ 서버 개인키인 server.key 파일이 생성된다. | ||
==인증요청서 생성== | ==인증요청서 생성== | ||
{{참고|인증요청서}} | {{참고|인증요청서}} | ||
< | <source lang='console'> | ||
[root@zetawiki ~]# openssl req -new -key server.key -out server.csr | [root@zetawiki ~]# openssl req -new -key server.key -out server.csr | ||
Enter pass phrase for server.key: | Enter pass phrase for server.key: | ||
</ | </source> | ||
:→ 서버 개인키 패스워드 입력 | :→ 서버 개인키 패스워드 입력 | ||
< | <source lang='console'> | ||
You are about to be asked to enter information that will be incorporated | You are about to be asked to enter information that will be incorporated | ||
into your certificate request. | into your certificate request. | ||
53번째 줄: | 53번째 줄: | ||
Common Name (eg, your name or your server's hostname) []:jmnote.com | Common Name (eg, your name or your server's hostname) []:jmnote.com | ||
Email Address []:web@jmnote.com | Email Address []:web@jmnote.com | ||
</ | </source> | ||
:→ 자신의 경우에 맞게 적절히 입력 | :→ 자신의 경우에 맞게 적절히 입력 | ||
< | <source lang='console'> | ||
Please enter the following 'extra' attributes | Please enter the following 'extra' attributes | ||
to be sent with your certificate request | to be sent with your certificate request | ||
A challenge password []: | A challenge password []: | ||
An optional company name []: | An optional company name []: | ||
</ | </source> | ||
:→ 그냥 {{Enter}}, {{Enter}} | :→ 그냥 {{Enter}}, {{Enter}} | ||
:→ 서버 인증요청서인 server.csr 파일이 생성되었다. | :→ 서버 인증요청서인 server.csr 파일이 생성되었다. | ||
67번째 줄: | 67번째 줄: | ||
* 키에 패스워드가 들어있으면 아파치 구동시마다 물어본다. 패스워드를 제거하더라도 SSL 암호화 통신에는 문제가 없으므로 제거하자. | * 키에 패스워드가 들어있으면 아파치 구동시마다 물어본다. 패스워드를 제거하더라도 SSL 암호화 통신에는 문제가 없으므로 제거하자. | ||
* 호스팅업체에서 제공하는 로드밸런서에 사설인증서를 올릴 때에도 패스워드를 제거해야 한다. | * 호스팅업체에서 제공하는 로드밸런서에 사설인증서를 올릴 때에도 패스워드를 제거해야 한다. | ||
< | <source lang='console'> | ||
[root@zetawiki ~]# cp server.key server.key.origin | [root@zetawiki ~]# cp server.key server.key.origin | ||
[root@zetawiki ~]# openssl rsa -in server.key.origin -out server.key | [root@zetawiki ~]# openssl rsa -in server.key.origin -out server.key | ||
Enter pass phrase for server.key.origin: | Enter pass phrase for server.key.origin: | ||
</ | </source> | ||
:→ 개인키 패스워드를 입력 | :→ 개인키 패스워드를 입력 | ||
< | <source lang='console'> | ||
writing RSA key | writing RSA key | ||
</ | </source> | ||
:→ 패스워드가 제거된 개인키 파일 server.key 이 생성된다. | :→ 패스워드가 제거된 개인키 파일 server.key 이 생성된다. | ||
< | <source lang='console'> | ||
[root@zetawiki ~]# ll server* | [root@zetawiki ~]# ll server* | ||
-rw-r--r--. 1 root root 1054 Sep 20 07:53 server.csr | -rw-r--r--. 1 root root 1054 Sep 20 07:53 server.csr | ||
-rw-r--r--. 1 root root 1679 Sep 20 07:56 server.key | -rw-r--r--. 1 root root 1679 Sep 20 07:56 server.key | ||
-rw-r--r--. 1 root root 1751 Sep 20 07:55 server.key.origin | -rw-r--r--. 1 root root 1751 Sep 20 07:55 server.key.origin | ||
</ | </source> | ||
:→ 패스워드가 제거된 파일(server.key)은 원래 파일(server.key.origin)에 비해 용량이 조금 줄어들었다. | :→ 패스워드가 제거된 파일(server.key)은 원래 파일(server.key.origin)에 비해 용량이 조금 줄어들었다. | ||
==인증서 생성== | ==인증서 생성== | ||
개인키와 인증요청서를 가지고 인증서를 생성해보자. | 개인키와 인증요청서를 가지고 인증서를 생성해보자. | ||
< | <source lang='console'> | ||
[root@zetawiki ~]# openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt | [root@zetawiki ~]# openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt | ||
Signature ok | Signature ok | ||
subject=/C=KR/ST=Seoul/L=Yeongdeungpo/O=Jmnote/OU=Jmnote/CN=jmnote.com/emailAddress=web@jmnote.com | subject=/C=KR/ST=Seoul/L=Yeongdeungpo/O=Jmnote/OU=Jmnote/CN=jmnote.com/emailAddress=web@jmnote.com | ||
Getting Private key | Getting Private key | ||
</ | </source> | ||
:→ 서버 인증서인 server.crt 파일이 생성되었다. | :→ 서버 인증서인 server.crt 파일이 생성되었다. | ||
:→ 여기서는 유효기간을 3650일(10년)로 했는데, 필요에 따라 바꾸면 된다. | :→ 여기서는 유효기간을 3650일(10년)로 했는데, 필요에 따라 바꾸면 된다. | ||
98번째 줄: | 98번째 줄: | ||
==확인== | ==확인== | ||
*개인키 | *개인키 | ||
< | <source lang='console'> | ||
root@zetawiki:~# cat server.key | head -3 | root@zetawiki:~# cat server.key | head -3 | ||
-----BEGIN RSA PRIVATE KEY----- | -----BEGIN RSA PRIVATE KEY----- | ||
MIIEpgIBAAKCAQEA2O9MNtpA193tRa7qu7JwNyUCvQa6PB0auclz1OXXvDQJGpgl | MIIEpgIBAAKCAQEA2O9MNtpA193tRa7qu7JwNyUCvQa6PB0auclz1OXXvDQJGpgl | ||
4x1llH616FjjVl6lxXfwOdejXeSUm03NVb2AGWShUn2GPDuXySwHhwMp4RpRmdvj | 4x1llH616FjjVl6lxXfwOdejXeSUm03NVb2AGWShUn2GPDuXySwHhwMp4RpRmdvj | ||
</ | </source> | ||
*사설인증서 | *사설인증서 | ||
< | <source lang='console'> | ||
root@zetawiki:~# cat server.crt | head -3 | root@zetawiki:~# cat server.crt | head -3 | ||
-----BEGIN CERTIFICATE----- | -----BEGIN CERTIFICATE----- | ||
MIIDdDCCAlwCCQCnEVwilOv9fTANBgkqhkiG9w0BAQsFADB8MQswCQYDVQQGEwJL | MIIDdDCCAlwCCQCnEVwilOv9fTANBgkqhkiG9w0BAQsFADB8MQswCQYDVQQGEwJL | ||
UjEOMAwGA1UECAwFU2VvdWwxDjAMBgNVBAcMBVNlb3VsMQ0wCwYDVQQKDARrdGRz | UjEOMAwGA1UECAwFU2VvdWwxDjAMBgNVBAcMBVNlb3VsMQ0wCwYDVQQKDARrdGRz | ||
</ | </source> | ||
==개인키와 인증서 설치== | ==개인키와 인증서 설치== | ||
개인키 파일(.key)과 인증서 파일(.crt)을 ssl이라는 파일명으로 [[httpd.conf 폴더]]에 복사하자. (httpd.conf 폴더는 설정에 따라 다를 수 있다.) | 개인키 파일(.key)과 인증서 파일(.crt)을 ssl이라는 파일명으로 [[httpd.conf 폴더]]에 복사하자. (httpd.conf 폴더는 설정에 따라 다를 수 있다.) | ||
< | <source lang='console'> | ||
[root@zetawiki ~]# cp server.key /etc/httpd/conf/ | [root@zetawiki ~]# cp server.key /etc/httpd/conf/ | ||
[root@zetawiki ~]# cp server.crt /etc/httpd/conf/ | [root@zetawiki ~]# cp server.crt /etc/httpd/conf/ | ||
123번째 줄: | 123번째 줄: | ||
-rw-r--r--. 1 root root 1298 Sep 20 08:45 server.crt | -rw-r--r--. 1 root root 1298 Sep 20 08:45 server.crt | ||
-rw-r--r--. 1 root root 1679 Sep 20 08:45 server.key | -rw-r--r--. 1 root root 1679 Sep 20 08:45 server.key | ||
</ | </source> | ||
==httpd.conf 설정== | ==httpd.conf 설정== | ||
[[httpd.conf]] 파일의 맨 아래에 다음 내용 추가<ref>[[httpd.conf 기본값]]일 때는 그냥 하단에 추가만 하면 되지만, 기존에 VirtualHost를 사용중이라면 적절히 수정해야 한다.</ref>. 단, [[DocumentRoot]]는 본인의 상황에 맞게 지정. | [[httpd.conf]] 파일의 맨 아래에 다음 내용 추가<ref>[[httpd.conf 기본값]]일 때는 그냥 하단에 추가만 하면 되지만, 기존에 VirtualHost를 사용중이라면 적절히 수정해야 한다.</ref>. 단, [[DocumentRoot]]는 본인의 상황에 맞게 지정. | ||
< | <source lang='bash'> | ||
NameVirtualHost *:443 | NameVirtualHost *:443 | ||
<VirtualHost *:443> | <VirtualHost *:443> | ||
137번째 줄: | 137번째 줄: | ||
DocumentRoot 폴더위치 | DocumentRoot 폴더위치 | ||
</VirtualHost> | </VirtualHost> | ||
</ | </source> | ||
:→ SSL 접속용 [[DocumentRoot]]를 별도로 지정해주자. (예: /var/www/https<ref>/var/www/html 와 비슷하게 예시 폴더를 지정해보았다. 지정한 폴더가 서버에 실제로 있어야 httpd 시작시 오류가 나지 않는다</ref>) | :→ SSL 접속용 [[DocumentRoot]]를 별도로 지정해주자. (예: /var/www/https<ref>/var/www/html 와 비슷하게 예시 폴더를 지정해보았다. 지정한 폴더가 서버에 실제로 있어야 httpd 시작시 오류가 나지 않는다</ref>) | ||
==아파치 재시작== | ==아파치 재시작== | ||
;명령어 | ;명령어 | ||
< | <source lang='bash'> | ||
service httpd restart | service httpd restart | ||
</ | </source> | ||
;실행예시 (성공) | ;실행예시 (성공) | ||
< | <source lang='console'> | ||
[root@zetawiki ~]# service httpd restart | [root@zetawiki ~]# service httpd restart | ||
Stopping httpd: [ OK ] | Stopping httpd: [ OK ] | ||
Starting httpd: [ OK ] | Starting httpd: [ OK ] | ||
</ | </source> | ||
;실행예시 (실패) | ;실행예시 (실패) | ||
< | <source lang='console'> | ||
[root@zetawiki ~]# service httpd restart | [root@zetawiki ~]# service httpd restart | ||
Stopping httpd: [ OK ] | Stopping httpd: [ OK ] | ||
160번째 줄: | 160번째 줄: | ||
Invalid command 'SSLEngine', perhaps misspelled or defined by a module not included in the server configuration | Invalid command 'SSLEngine', perhaps misspelled or defined by a module not included in the server configuration | ||
[FAILED] | [FAILED] | ||
</ | </source> | ||
:→ mod_ssl 패키지가 없어서 그렇다. [[Invalid command 'SSLEngine']] 참조. | :→ mod_ssl 패키지가 없어서 그렇다. [[Invalid command 'SSLEngine']] 참조. | ||
==웹브라우저 테스트== | ==웹브라우저 테스트== | ||
*https://도메인 또는 https://아이피 로 접속하면 | *https://도메인 또는 https://아이피 로 접속하면 | ||
< | <source lang='text'> | ||
이 웹 사이트의 보안 인증서에 문제가 있습니다. | 이 웹 사이트의 보안 인증서에 문제가 있습니다. | ||
175번째 줄: | 175번째 줄: | ||
이 웹 페이지를 닫고 이 웹 사이트를 계속 탐색하지 않는 것이 좋습니다. | 이 웹 페이지를 닫고 이 웹 사이트를 계속 탐색하지 않는 것이 좋습니다. | ||
... (생략) | ... (생략) | ||
</ | </source> | ||
:→ 개인서명이라 신뢰할 수 없다고 하지만<ref>IE8의 경우, 주소표시줄이 붉게 표시되고 '인증서 오류'라는 말이 계속 따라다닌다. ㅠ_ㅠ</ref>, 보안 접속은 잘 된다. | :→ 개인서명이라 신뢰할 수 없다고 하지만<ref>IE8의 경우, 주소표시줄이 붉게 표시되고 '인증서 오류'라는 말이 계속 따라다닌다. ㅠ_ㅠ</ref>, 보안 접속은 잘 된다. | ||