RadarURL
Skip to content
조회 수 82 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

 포스팅은 Apache에서 SSL을 적용하는 가이드입니다.


기존 설치되어있는 Apache에서 SSL 인증서를 만들고, 적용하여 HTTP>HTTPS로의 Rewrite를 테스트해보도록 하겠습니다. 

Apache 웹서버에 SSL를 적용하기 위해 아래 두 항목이 웹서버에 설치되어 있어야 합니다.

- Openssl 암호화 라이브러리 
- Mod_ssl 모듈 
 
위 두 항목이 웹서버에 설치되어 있다면 개인키를 생성하고 생성된 개인키를 바탕으로 CSR 파일을 생성합니다. 
생성된 CSR 파일을 공식 인증기관에 접수하여 정식 인증서를 발급받습니다.
발급된 인증서를 웹서버에 설치하게 되면 SSL 설정을 완료하게 됩니다.
위 일련의 진행사항은 아래와 같은 절차를 따르게 됩니다. 
1. openssl 라이브러리 설치상태 확인 
2. mod_ssl 모듈 설치상태 확인 
3. 개인키 생성 
4. CSR 생성 
5. 공식 인증기관에 접수 
6. 정식 인증서 발급 
7. SSL 설정
 
그럼 진행하도록 하겠습니다. 
 
1. openssl 설치
 

-bash-4.2$ sudo yum install openssl

[sudo] password for apacheUser:

Loaded plugins: fastestmirror, langpacks

Loading mirror speeds from cached hostfile

 * base: centos.mirror.cdnetworks.com

 * extras: centos.mirror.cdnetworks.com

 * updates: centos.mirror.cdnetworks.com

Package 1:openssl-1.0.2k-12.el7.x86_64 already installed and latest version

 

 

2. mod_ssl 을 설치합니다. 

-bash-4.2$ sudo yum install mod_ssl

[sudo] password for apacheUser:

Loaded plugins: fastestmirror, langpacks

Loading mirror speeds from cached hostfile

 * base: centos.mirror.cdnetworks.com

 * extras: centos.mirror.cdnetworks.com

 * updates: centos.mirror.cdnetworks.com

..

..

Total download size: 111 k

Installed size: 224 k

Is this ok [y/d/N]: y

Downloading packages:

mod_ssl-2.4.6-80.el7.centos.1.x86_64.rpm                                                                                                                         | 111 kB  00:00:00

Running transaction check

Running transaction test

Transaction test succeeded

Running transaction

  Installing : 1:mod_ssl-2.4.6-80.el7.centos.1.x86_64                                                                                                                               1/1

  Verifying  : 1:mod_ssl-2.4.6-80.el7.centos.1.x86_64                                                                                                                               1/1

 

Installed:

  mod_ssl.x86_64 1:2.4.6-80.el7.centos.1

 

Complete!

 

 

/etc/httpd/modules 아래에 mod_ssl.so 이 생성됩니다. 

이를 APACHE_HOME/modules/아래에 copy합니다. 

 

2.openssl 명령어를 이용해서, 개인키 생성 > CSR 생성 > 자체적으로 서명한 crt파일 생성을 완료합니다. 

 

개인키 생성>

-bash-4.2$ sudo openssl genrsa -des3 -out test.key 2048

[sudo] password for apacheUser:

Generating RSA private key, 2048 bit long modulus

..................................+++

.............................................................................................+++

e is 65537 (0x10001)

Enter pass phrase for test.key:

Verifying - Enter pass phrase for test.key:

 
 
CSR 생성>

-bash-4.2$ sudo openssl req -new -key test.key -out test.csr

Enter pass phrase for test.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) []:kyungkido

Locality Name (eg, city) [Default City]:bundanggu

Organization Name (eg, company) [Default Company Ltd]:sw

Organizational Unit Name (eg, section) []:kkm

Common Name (eg, your name or your server's hostname) []:kkm

Email Address []:kkm

 

Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []:

An optional company name []:

 

자체적으로 서명한 crt파일 생성>

-bash-4.2$ sudo openssl x509 -req -days 365 -in test.csr -signkey test.key -out test.crt

Signature ok

subject=/C=kr/ST=kyungkido/L=bundanggu/O=sw/OU=kkm/CN=kkm/emailAddress=kkm

Getting Private key

Enter pass phrase for test.key:

 

 

How To Generate SSL Key, CSR and Self Signed Certificate For Apache 

https://www.thegeekstuff.com/2009/07/linux-apache-mod-ssl-generate-key-csr-crt-file/

 

3. httpd.conf 수정

 

LoadModule ssl_module modules/mod_ssl.so

LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

→ mod_ssl과 mod_socache_shmcb 모듈을 활성화합니다.

 

Include conf/extra/httpd-ssl.conf

→ httpd-ssl.conf를 사용할 수 있도록 활성화 시킵니다.

 

LoadModule rewrite_module modules/mod_rewrite.so

→ rewrite 기능을 사용할 수 있도록 활성화 시킵니다.

 

4. httpd-ssl.conf 설정

 

<VirtualHost _default_:443>

 

#   General setup for the virtual host

DocumentRoot "/home/apache/apache/htdocs"

ServerName www.kkm.com:443

ServerAdmin you@example.com

ErrorLog "/home/apache/apache/logs/error_log"

TransferLog "/home/apache/apache/logs/access_log"

JkMount /* load_balancer

     

SSLEngine on

SSLCertificateFile [인증서 파일 경로]

SSLCertificateKeyFile [키파일 경로]

SSLCACertificateFile [중계인증서 파일경로] 

 

5. httpd-vhost.conf 설정 : HTTP > HTTPS 로의 Rewrite를 위한 설정을 합니다. 

<VirtualHost *:80>

    DocumentRoot "/home/apache/apache/htdocs"

    ServerName www.kkm.com

    ServerAlias www.kkm.com

    ErrorLog "/home/apache/apache/logs/ddd/error_log"

    CustomLog "/home/apache/apache/logs/ddd/access_log" common

    JkMount /* load_balancer

    RewriteEngine On

    RewriteCond %{HTTPS} off

    RewriteRule .* https://www.kkm.com/session.jsp

</VirtualHost>

 

 

*참고하기*

RewriteCond %{HTTPS} on/off 설정을 이용하여 프로토콜 별로 처리할 수 있습니다.

Rewrite를 추가하는 부분에서 SSL 인증서를 사용하고 있다면

[P] 옵션을 사용하기 때문에  (P=Proxy)

SSLProxyEngine On 

설정을 추가해줘야 합니다.

 

Proxy를 사용하지 않아도 될 경우에는 [P,R,L] -> [R=301,L] 사용

 

- HTTP를 HTTPS로 리다이렉트

   <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{HTTPS} off
        RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [P,R,L]
   </IfModule>

 

- HTTPS를 HTTP로 리다이렉트

   SSLProxyEngine On    => SSL 인증서를 이용하고 있다면 넣어줘야 한다.
   <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{HTTPS} on
        RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [P,R,L]
   </IfModule>
 
- HTTP/HTTPS를 고려하여, 받은 URL 그대로 리다이렉트.
 
   SSLProxyEngine On    => SSL 인증서를 이용하고 있다면 넣어줘야 한다.   
<IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{HTTPS} on
        RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [P,R,L]
        RewriteCond %{HTTPS} off
        RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [P,R,L]

   </IfModule> 

 

*참고하기*

한 컴퓨터/장비에서 여러개의 웹서비스들을 구동할 수 있도록 할 수 있는 방법을 

아파치 가상 호스트(VirtualHost)라고 하며,그 적용방법은 크게 아래의 4가지로 나눌 수 있습니다.

 

1. IP기반 가상호스트(IP-based virtual host) : 가상호스트별로 각각 IP주소 1개씩 부여
2. 포트기반 가상호스트(port-based virtual host) : 동일한 호스트에 포트만 다르게 지정
3. 이름기반 가상호스트(name-based virtual host) : 같은 IP에서 도메인명이 다른 가상호스트들 운용
4. 기본 가상호스트(default virtual host) : 특정 호스트에 해당 사항 없을때 기본적으로 응답하게 될 호스트

일반적인 설정은 보통 httpd-vhosts.conf에 가상 호스트를 설정하고, httpd.conf 파일 마지막에 Include conf/extra/httpd-vhosts.conf를 추가하는 방식으로 이루어집니다.

IP 기반 가상 호스트(IP-based virtual host)
- IDC 또는 전용망 네트워크환경에서 한 1개의 서버장비에 여러개의 IP를 할당받고 IP별로 가상호스트를 사용하는 방법입니다.
- IP추가를 위해 각각의 네트워크 설정 등이 필요합니다.

 
Listen 211.49.89.1:80
 isten 211.49.89.2:80

 <VirtualHost 211.49.89.1:80>
   DocumentRoot /var/www/site1
   ServerName site1.example.com
 </VirtualHost>

 <VirtualHost 211.49.89.2:80>
   DocumentRoot /var/www/site2
   ServerName site2.example.com
 </VirtualHost>
 

포트 기반 가상 호스트(port-based virtual host)
- 포트를 기반으로 가상 호스트를 설정합니다. Listen 포트에 사용할 포트를 여러개 설정한 후 VirtualHost를 해당 포트로 설정하면 됩니다.
- 포트번호를 사용자가 미리알고 사용하여야하는 용도의 서비스에 적합하며, 1개의 장비/회선/IP에 각기 다른 여러개의 포트로 구분하여 사용하는 서비스에 적합합니다.
 
 
Listen 80
 Listen 90

 <VirtualHost 211.49.89.1:80>
   DocumentRoot /var/www/port_80
  ServerName site1.example.com
 </VirtualHost>

 <VirtualHost 211.49.89.1:90>
   DocumentRoot /var/www/port_90
  ServerName site2.example.com
 </VirtualHost>
 

이름 기반 가상 호스트(name-based virtual host)
- 한 장비/IP에 여러개의 도메인 이름을 부여하고 도메인 이름별로 가상 호스트를 사용하는 방법입니다.
- 일반적인 웹호스팅 서비스에 많이 사용되는 방식으로 이름 기반 가상 호스트는 클라이언트 요청시 전송하는 헤더중 Host 헤더정보를 사용하여 가상 호스트 설정에 따라 웹 서비스를 하게 됩니다.
 
  
NameVirtualHost *:80

 <VirtualHost *:80>
  DocumentRoot /var/www/site1
  ServerName id1.codns.com
</VirtualHost>

 <VirtualHost *:80>
  DocumentRoot /var/www/site2
  ServerName id2.codns.com
</VirtualHost>
 
 
기본 가상호스트(default virtual host)
- 기본 가상호스트란 어떤 가상호스트에도 해당하지않은 IP 주소와 포트에 대한 모든 요청을 처리하여 호스트를 띄워주는 것입니다.즉, 지정된 가상호스트가 없을 때 기본적으로 응답에 응할 호스트를 지정해 둔 것이 기본 가상호스트입니다.
- default(기본) 가상호스트의 포트로 와일드카드를 사용하여 어떤 요청도 주서버로 못가도록 만듭니다.
- AliasMatch나 RewriteRule을 사용하여 어떤 요청을 특정 페이지(혹은 스크립트)로 재작성할(rewrite) 수 있습니다.

 
NameVirtualHost *:80

 <VirtualHost _default_:*>
  DocumentRoot /var/www/site
  DocumentRoot /www/default
 </VirtualHost>
 
 
예제에 표기된 항목설명
1. NameVirtualHost 항목 : 만일 서버가 유동아이피를 사용하신다면 "NameVirtualHost *"과 같이 *를 아이피대신 사용하세요. 원래는 "NameVirtualHost 아이피"와 같이 현재 서버의 아이피를 넣어줘야 하지만 유동아이피를 사용하므로 아이피가 바뀔때 마다 이 부분을 수정해 줄 수는 없는 일입니다. "*" 기호는 "모든"이라는 의미를 가지고 있으므로 아이피대신 이 기호를 사용하시면 됩니다.
2. VirtualHost 항목 : 이 부분도 위와 같은 이유로 "*"를 사용하시면 됩니다.
3. ServerName 항목 : 사용할 도메인 주소를 적어 줍니다.
4. ServerAlias 항목 : 이것은 어떤 도메인으로 접속했을 때 홈페이지를 보이도록 할 것인지를 정하는 부분입니다. 즉, 첫번째 가상 호스트에서는 "*.aaa.com"을 지정했으므로 "aaa.com"을 포함한 "xxx.aaa.com" , "yyy.aaa.com" 등 앞에 어떠한 레코드(서브 도메인)를 붙여서 접속하더라도 모두 홈페이지를 보여줍니다.  이와는 다르게 두번째 가상 호스트에서는 "*"기호를 사용하지 않았으므로 이 항목에서 지정한 "bbb.com" , "xxx.bbb.com" , "www.bbb.com"로 접속 했을 때만 홈페이지를 보여줍니다.
5. DocumentRoot 항목 : 각각의 가상 호스트가 갖게될 홈디렉토리의 경로를 적어 줍니다. 윈도우용 아파치의 경우는 "C:\Apache2.2\htdocs\site"형식으로 경로를 작성하며, 리눅스의 경우에는 "/var/www/site"형식으로 작성하시면 됩니다. 

 

 

 

6.모든 설정 완료 후, apache를 기동합니다. 

 

7.결과 

http://www.kkm.com/session.jsp 호출 시,

https://www.kkm.com/session.jsp 로 호출되는것을 확인할 수 있습니다. 

 

 0101.jpg

 

 

 

 

고맙습니다.

 

출처 : https://waspro.tistory.com/383

?

List of Articles
번호 제목 글쓴이 날짜 조회 수
101 [Linux] 아파치(Apache) SSL 인증서 설치 JAESOO 2021.01.12 136
100 리눅스 CentOS 7 HTTPS 리다이렉트 설정 JAESOO 2021.01.12 155
» [Apache] SSL 적용하기 / HTTP->HTTPS로 Rewrite하기 JAESOO 2021.01.12 82
98 centos 7.x에서 ssl 설치하기 JAESOO 2021.01.12 84
97 CentOS7 Apache ssl 인증서 적용 그리고 80 to 443 redirect JAESOO 2021.01.12 78
96 무료 SSL 보안 인증서 발급받기 (Free SSL Certificate) JAESOO 2021.01.12 103
95 [리눅스][XE]XpressEngine(제로보드) 사용 시, 500 Internal Server Error when using .htaccess with RewriteEngine JAESOO 2021.01.02 50
94 CentOS 7 yum으로 phpMyAdmin 설치 & 권한(permission) 문제 해결 JAESOO 2021.01.02 44
93 [리눅스/CentOS 7] PHP7.2 설치(Webtatic) JAESOO 2021.01.02 40
92 CentOS 7 PHP / PHP-FPM 7.4 설치 (remi repo) JAESOO 2021.01.02 42
91 Apache 403 Forbidden error 해결 방법 JAESOO 2021.01.02 30
90 아파치 Forbidden You don’t have permission to access / on this server. 에러 해결 JAESOO 2021.01.02 37
89 [리눅스] 웹서버(아파치;apache) 설치후 다른 계정으로 실행하기 JAESOO 2021.01.02 23
88 [CentOS] 아파치(apache) 제거하기 JAESOO 2021.01.02 28
87 [Linux] Apache 웹서버 정리 JAESOO 2021.01.02 34
86 CentOS 7 - Apache 아파치 실행 상태 확인 JAESOO 2021.01.02 36
85 아파치 2.4에서 httpd.conf 데몬 실행 오류 찾아내는 방법 JAESOO 2021.01.02 26
84 service httpd.service 오류 발생 시 해결방법 JAESOO 2021.01.02 29
83 [Apache & TOMCAT 연동 2] 일반계정으로 아파치 관리 JAESOO 2021.01.02 109
82 CentOS 7 / Apache / 하나의 서버에 여러 사이트 운영하기 JAESOO 2021.01.02 26
Board Pagination Prev 1 2 3 4 5 6 Next
/ 6

PageViews   Today : 3,284   Yesterday : 4,183   Total : 22,770,879  /  Counter Status   Today : 482   Yesterday : 520   Total : 1,893,182
Site Info   Member : 253  /  Total documents : 1,303   New documents : 0  /  Total comments : 26

Edited by JAESOO

sketchbook5, 스케치북5

sketchbook5, 스케치북5

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소