1. 클라이언트가 HTTPS 프로토콜을 이용해 웹서버에 암호화 통신 요청 2. 웹서버가 클라이언트에게 인증서(공개키) 전송 3. 클아이언트가 인증서에 담긴 웹서버 기본 정보 및 해시값등을 읽고, 그 인증서를 신뢰할 수 있을경우 공유키 생성 4. 클라이언트가 공유키를 웹서버 인증서로 암호화한 뒤 웹서버에 전송 5. 웹서버가 암호화된 공유키를 자신의 개인키로 복호화하여 획득 6. 이제 클라이언트와 웹서버가 서로 똑같은 공유키를 가지고 있으므로 그 공유키를 모든 데이터를 암호화하여 통신
yum -y install mod_ssl
mod_ssl 패키지 설치, mod_ssl은 SSL 암호화를 지원하는 아파치 모듈
mkdir /etc/ssl/private
개인키를 저장할 디렉토리를 만듬
chmod 700 /etc/ssl/private
이 디렉토리는 비공개로 유지되어야하므로 root 계정 이외의 사용 권한을 없앰
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt
SSL 개인키(.key) 및 인증서 (.crt) 파일 생성
openssl : SSL키를 생성하고 관리하기 위한 명령어 도구 req -x509 : X.509 관리 사용. X.509는 키 및 인증서 관리를 위해 SSL/TSL을 준수하는 공개키 표준 인프라 -nodes : 인증서 보호 암호 생략 -day 365 : 인증서 유효기간을 1년으로 설정 -newkey rsa:2048 : 길이가 2048 비트인 RSA키 생성 -out : 생성될 인증서 경로 지정
후에
Country Name 및 기타(FQDN) 정보들 입력
-> 생성된 키파일과 인증서는 'etc/ssl' 디렉토리에 있는 각 하위 디렉토리에 저장
openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
웹 서버와 클라이언트가 보안 협상을 할 때 사용할 디피헬만 그룹을 생성
cat /etc/ssl/certs/dhparam.pem | tee -a /etc/ssl/certs/apache-selfsigned.crt
CentOS 7에 제공되는 아파치 버전은 SSLOpenSSLConfCmd 명령이 포함되어 있지 않으므로 이 명령어로 위 파일 내용을 인증서 끝에 직접 추가시켜줘야됨
vi /etc/httpd/conf.d/ssl.conf
아파치 SSL 설정 파일 편집
ServerName 192.168.219.105: 443
ServerName 설정에서 주석을 지운 후 서버 IP를 똑같이 적는다.
/etc/httpd/conf/httpd.conf에 있는 설정과 서로 똑같이 맞춰줘야 한다.
75 #SSLProtocol all -SSLv2 -SSLv3
80 #SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!SEED:!DEA
100 SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
107 SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
인증서 파일과 키 파일의 경로를 지정함
vi /etc/httpd/conf/httpd.conf
아파치 HTTP 설정 파일 편집
94 ServerName 192.168.111.200:80
주석을 지우고 SSL 설정 파일의 ServerName 설정에서 적었던 이름과 똑같이 적어줌
apachetl configtest
-> 아파치 설정 파일 오류
systemctl restart httpd
-> 아파치 HTTP 데몬 재시작
firewall-cmd --permanent --add-service=https
-> 방화벽에서 HTTPS 포트(TCP 443)
systemctl restart firewalld
-> 방화벽 재시작
이제 클라이언트 PC인 윈도우 10에서 CentOS 7의 인증서(/etc/ssl/certs/apache-selfsigned.crt)를 복사하여 옮김
아직 '신뢰할 수 없는 인증서'인 상태이기 때문에 파일을 열고 '인증서 설치'를 누른다.