실습> 웹서버에 인증서 사용하기
http (80) : 전송되는 데이터가 암호화 통신이 아니고 평문 통신이므로 중요 정보를 노출당할 수 있다.
https (443) : 전송되는 데이터가 암호화 통신이므로 안전하게 사용할 수 있다.
1. mod_ssl 설치
mod_ssl 아파치 모듈을 설치한다.
# yum -y install mod_ssl
2. 개인키 생성
req : x.509 인증 요청서 만들기(PKCS # 10 X.509 인증서 서명 요청 (CSR) 관리)
-nodes : 이 옵션을 지정하면 개인키가 생성되면 암호화되지 않는다.(암호화 하면 인증서 쓸 때 계속 암호 넣어줘야 함)
-newkey : 이 옵션은 새 인증서 요청과 새 개인 키를 만든다.
rsa : nbits (nbits는 비트 수)는 크기가 nbits 인 RSA 키를 생성
nbits가 생략 된 경우, 즉 -newkey rsa가 지정되면 기본 키 크기인 구성 파일이 사용
-keyout 파일이름 : 이것은 새로 생성 된 개인 키를 쓸 파일 이름을 제공(개인키 파일 이름 지정)
-out 파일이름 : 이것은 기본적으로 출력에 쓸 수있는 파일 이름이나 표준 출력을 지정(인증 요청서 파일 이름 지정)
# openssl req -nodes rsa:2048 -keyout sbscom.key -out sbscom.csr
Generating a 2048 bit RSA private key
............................................................+++
......................+++
writing new private key to 'sbscom.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]:gangnam
Organization Name (eg, company) [Default Company Ltd]:sbscom
Organizational Unit Name (eg, section) []:security team
Common Name (eg, your name or your server's hostname) []:www.sbs.com << 여기는 무조건 설정
Email Address []:webmaster@sbs.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: <-- 엔터
An optional company name []: <-- 엔터
# ls
sbscom.csr sbscom.key
3. 개인 인증서 생성
자체적으로 자가 인증을 이용해서 인증서를 생성한다.
실제로는 공인된 인증 기관에 sbscom.csr 파일을 보내서 그쪽에서 만들어서 보낸준 것을 사용해야 한다.
# openssl x509 -req -days 365 -in sbscom.csr -signkey sbscom.key -out sbscom.crt
Signature ok
subject=/C=kr/ST=seoul/L=gangnam/O=sbscom/OU=security team/CN=www.sbs.com/emailAddress=webmaster@sbs.com
Getting Private key
# ls
sbscom.crt sbscom.csr sbscom.key
4. 권한 변경 및 파일 이동
# chmod 600 *
# ls -l
합계 12
-rw-------. 1 root root 1314 11월 9 19:24 sbscom.crt
-rw-------. 1 root root 1062 11월 9 19:21 sbscom.csr
-rw-------. 1 root root 1704 11월 9 19:21 sbscom.key
# mv sbscom.crt /etc/pki/tls/certs/
# mv sbscom.csr /etc/pki/tls/private/
# mv sbscom.key /etc/pki/tls/private/
SELinux 관련 설정을 변경한다.
chcon 보안문맥 -t 옵션을 이용해서 type을 cert_t 로 변경한다.
# chcon -t cert_t /etc/pki/tls/private/sbscom.key
# chcon -t cert_t /etc/pki/tls/private/sbscom.csr
# chcon -t cert_t /etc/pki/tls/certs/sbscom.crt
5. ssl 설정
mod_ssl 모듈을 설치하면 /etc/httpd/conf.d/ssl.conf 파일이 생기고 이 파일을 편집한다.
100 라인에 SSLCertificateFile, 108 라인에 SSLCertificateKeyFile 지시자의 값을 아래처럼 수정한다.
# vi /etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/pki/tls/certs/sbscom.crt
SSLCertificateKeyFile /etc/pki/tls/private/sbscom.key
6. SSL 가상호스트 설정
기존에 설정된 가상호스트 부분에 <VirtualHost *:443> 부분을 추가한다.
# vi /etc/httpd/conf/httpd.conf
:
:(생략)
###########
# sbs.com #
###########
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/sbscom.crt
SSLCertificateKeyFile /etc/pki/tls/private/sbscom.key
ServerAdmin webmaster@sbs.com
DocumentRoot /home/sbsuser/public_html
ServerName www.sbs.com
ErrorLog logs/sbs.com-error_log
CustomLog logs/sbs.com-access_log common
</VirtualHost>
SELinux 상태를 확인한다.
# sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 31
아파치 웹서버를 재시작한다.
# systemctl restart httpd
포트를 확인해서 443 포트가 떠있으면 성공이다.
# netstat -nltp | grep http
tcp6 0 0 :::443 :::* LISTEN 2827/httpd
tcp6 0 0 :::80 :::* LISTEN 2827/httpd
7. 접속
웹브라우저를 열어서 https 로 접속을 한다.
자가 인증을 했으므로 인증서가 오류가 발생된다. 고급 -> 안전하지 않음 으로 이동 부분을 클릭하면 된다.
+ 다시 초기화 하는 법
# systemctl stop httpd
# yum -y remove httpd php mod_ssl
# rm -rf /etc/httpd
'Linux > Linux 실습' 카테고리의 다른 글
| [Linux] HTML 문서 만들기 (0) | 2021.11.11 |
|---|---|
| [Linux] netcat 을 이용한 문자 & 데이터 전송 (0) | 2021.11.10 |
| [Linux] 조건에 맞는 이름 기반의 가상 호스트 생성 (0) | 2021.11.09 |
| [Linux] 가상 호스트 문제점 해결 (0) | 2021.11.09 |
| [Linux] 가상 호스트 설정하기 (0) | 2021.11.09 |