우분투 16.04 또는 CentOS7로 SSL 전송
본문
SSL 인증서는 모든 웹 사이트의 사실상 일부가 되었습니다.
한 서버에서 다른 서버로 이동할 때 보안 상태를 유지하기 위해 SSL을 처리하는 방법을 살펴보겠습니다.
Apache의 SSL을 구체적으로 다루지만 SSL 암호화를 지원하는 모든 서비스에도 동일한 개념이 적용됩니다.
서버간에 SSL 전송
인증서가 IP 주소나 물리적 서버에 영구적으로 연결되어 있다는 오해가 있지만 이는 사실이 아닙니다.
실제로는 인증서를 나열한 도메인 이름에만 연결되어 있으며 이전이 가능합니다.
기술적으로 SSL은 여러 서버 또는 서비스에서 동일한 도메인 이름을 보호하는 데 사용될 수 있습니다. 이 개념을 활용하면 SSL을 이전하는 데 도움이 됩니다.
전제 조건
'체인 인증서'뿐만 아니라 SSL 인증서와 SSL 개인 키의 복사본이 있어야 합니다.
종종 인증서의 domain.com.crt와 개인 키의 domain.com.key라는 두 개의 개별 파일과 체인 인증서의 signing_authority.crt 파일이 추가됩니다. 이 파일들에 대한 또 다른 유명한 명명 규칙은 cert.pem과 key.pem이지만 때로는 파일 접미사가 없습니다 (.pem 또는 .crt).
이 파일을 어디에서 얻을 수 있는지 어떻게 알 수 있습니까? 먼저 이러한 구성의 위치를 결정하는 방법에 대해 알아 보겠습니다.
1 단계 : SSL 파일 수집
데비안 SSL 파일 위치
Ubuntu를 포함한 Linux 배포판에서는 다음을 사용하여 Apache에서 로드 된 가상 호스트를 확인할 수 있습니다.
apache2ctl -S
CentOS SSL 파일 위치
CentOS를 포함한 RHEL 기반 배포판의 경우 다음을 사용할 수 있습니다.
httpd -S
이 두 명령 모두 로드 된 가상 호스트와 해당 구성 파일 위치를 비롯하여 실행중인 구성 설정을 나열합니다. 우리는 복사하고자 하는 SSL의 도메인 이름과 HTTPS 포트 443을 찾고 있습니다.
예를 들어,이 라인은 문제의 도메인에 대한 출력입니다 :
port 443 namevhost domain.com (/etc/apache2/sites-enabled/domain.com.conf:1)
domain.com 도메인용 SSL을 복사 중이므로 이 구성 파일을 확인하고 포트 443을 참조하는 가상 호스트 블록을 찾습니다.
vim /etc/apache2/sites-enabled/domain.com.conf
파일을 검색하면 다음과 같은 결과를 얻습니다.
<VirtualHost *:443>
ServerName domain.com
ServerAlias www.domain.com
DocumentRoot /data/www/domain.com
SSLCertificateFile /etc/ssl/domain.com/cert.pem
SSLCertificateKeyFile /etc/ssl/domain.com/privkey.pem
SSLCertificateChainFile /etc/ssl/domain.com/chain.pem
</VirtualHost>
이 텍스트 블록은 인증서 파일 (cert.pem), 개인 키 (privkey.pem) 및 중간 인증서 (chain.pem)와 같이 새 서버로 가져와야 하는 세 가지 파일을 모두 설명합니다.
2 단계 : SSL 파일 복사
마지막 단계에서 발견 한 파일 경로에서 이 사이트의 모든 SSL 파일이 /etc/ssl/domain.com 디렉토리에 있음을 알 수 있습니다.
따라서 rsync 도구를 사용하여 이 전체 폴더를 새 서버에 복사 할 수 있습니다. 이전 서버의 IP 주소가 123.45.67.89라고 가정하고 새 서버로 건너 뛰고 아래 명령을 실행하십시오. 후행 슬래시 (/)는 이 명령에 매우 중요합니다!
mkdir -p /etc/ssl
rsync -avz root@123.45.67.89:/etc/ssl/domain.com /etc/ssl/
이 방법은 이러한 파일의 소유권과 사용 권한을 보존하므로 다른 점이 있으면 안됩니다.
다음 섹션 인 3 단계는 두 섹션으로 나뉩니다. 새 서버가 CentOS 7 인 경우 새 서버가 Ubuntu 16.04이거나 단계 3B를 선택하십시오.
3 단계 : 새 서버에 Apache 설정 (Ubuntu 16.04)
비 SSL 가상 호스트 설정은 새 서버의 도메인에 필요합니다. 아직 그렇게 하지 않았다면 mod_ssl을 설치하고 활성화하여 Apache가 대상 시스템에서 SSL 통신을 구문 분석 할 수 있게 해야 합니다.
apt-get install mod_ssl
a2enmod ssl
mod_ssl을 설치할 수 없다는 메시지를 받으면 다른 패키지를 통해 설치 될 수 있습니다. 이 경우에 해당하는지 확인하십시오.
dpkg -S mod_ssl.so
이것이 긍정적인 결과를 반환하면 다음을 실행하게 됩니다.
a2enmod ssl
활성화를 완료하십시오. mod_ssl을 활성화 한 후 Apache를 다시 시작하십시오.
systemctl restart apache2
마지막으로, 변경해야 할 구성 파일이 하나 있는데, 명명 된 가상 호스트를 제공 할 수 있습니다. SSL 모듈을 활성화하면 Apache가 포트 443에서 청취 할 수 있지만 IP 당 여러 사이트를 호스트 할 수 있어야 합니다. /etc/apache2/ports.conf 파일을 엽니다.
vim /etc/apache2/ports.conf
내용이 다음과 같은 출력을 하는지 확인하십시오.
<IfModule ssl_module>
NameVirtualHost *:80
Listen 80
NameVirtualHost *:443
Listen 443
</IfModule>
특히 NameVirtualHost 행이 있는지 확인합니다. 이것이 사실이라면 구성을 테스트하고 다시 로드하여 설정을 적용 할 수 있습니다.
apachectl configtest
systemctl reload apache2
** 활성화 된 사이트는 /etc/apache2/sites-enabled/에 나열된 구성을 가지고 있지만 실제 구성 파일은 /etc/apache2/sites-available/에 있어야 하며 따라서 Apache 제어 스크립트는 사이트를 켜고 끌 수 있습니다. 사이트 활성화 폴더는 사이트의 구성에 대한 심볼 링크로 구성되어 있습니다.
다음으로, 방금 복사 한 SSL 파일을 호출하기 위해 웹 사이트 구성을 추가해야 합니다. 새 서버에서 이전 서버와 동일한 문서 루트를 사용하는 경우 원본 가상 호스트 블록을 복사하여 /etc /apache2/sites-available/의 새 구성 파일에 붙여 넣을 수 있습니다. 참조 된 IP를 새 서버와 일치하도록 업데이트하십시오.
실행중인 모듈 또는 새 시스템에서 수행 된 다른 사용자 정의에 차이가 있는 경우 대상 서버의 기존 비 SSL 가상 호스트 블록을 별도의 파일로 복사하십시오.
또한 /etc/apache2/sites-available/ 아래에서 포트 번호를 업데이트하고 SSL 파일에 대한 세 줄을 추가하십시오. 이 예에서는 이전 파일의 정확한 내용을 복사하여 /etc/apache2/sites-available/domain.com_ssl.conf에 붙여 넣었습니다.
그렇게 한 후에 실행합니다.
a2ensite domain.com_ssl
이렇게 하면 구성이 /etc/apache2/sites-enabled/ 폴더에 링크됩니다. 이 사이트 이름은 구성 파일의 이름에 따라 변경됩니다 (.conf를 그냥 끊어짐). 다음으로 이 새로운 구성을 테스트합니다.
apachectl configtest
모든 것이 정상적으로 돌아 오면 apache2 서비스의 구성 파일을 다시 로드 할 수 있습니다.
systemctl reload apache2
3B 단계 : 새 서버에 Apache 설정 (CentOS 7)
CentOS의 각 명령 줄 작업은 매우 다르지만 전반적인 절차는 동일하며 구성 파일의 내용은 비슷합니다. 먼저 Apache가 SSL 트래픽을 지원하도록 구성되었는지 확인하십시오.
yum install mod_ssl
이 설치 절차에서는 포트 443에서 수신 대기하고 Apache를 다시 시작하기 위해 /etc/httpd/conf.d/에 ssl.conf 파일을 자동으로 설정해야 하지만 명명 된 가상 호스트는 활성화하지 않을 수 있습니다. httpd.conf 파일에 다음 행을 추가하십시오 (아직 없는 경우). 이 줄을 추가하면 가상 호스트 블록을 사용하여 IP 주소별로 여러 사이트를 제공 할 수 있습니다.
<IfModule mod_ssl.c>
NameVirtualHost *:443
</IfModule>
다음으로, 방금 복사 한 SSL 파일을 호출하기 위해 웹 사이트 구성을 추가해야 합니다. 새 서버에서 이전 서버와 동일한 문서 루트를 사용하는 경우 원본 가상 호스트 블록을 복사하여 /etc/httpd/conf.d/의 새 구성 파일에 붙여 넣고 IP 주소가 대상 서버에 있는 것과 일치해야 합니다.
실행중인 모듈 또는 새 시스템에서 수행 된 다른 사용자 정의에 차이가 있는 경우 대상 서버의 기존 비 SSL 가상 호스트 블록 사본을 별도의 파일로 만들 수 있습니다. 또한 /etc/httpd/conf.d/에서 포트 번호를 업데이트 하고 SSL 파일에 대한 세 줄을 추가하십시오.
생성이 완료되면 파일의 구성 구문을 테스트합니다.
httpd -t
결과는 'Syntax OK'라고 말하거나 문제가 되는 파일과 라인을 알려줍니다. 모든 것이 정상이라면 Apache 구성을 다시 로드 할 수 있습니다.
systemctl reload httpd
Let 's Encrypt를 사용한다면 어떨까요?
SSL 암호화는 다른 SSL과 마찬가지로 이전 할 수 있지만 수동으로 SSL 가상 호스트 구성 파일을 만들면 나중에 암호화 설치 시도와 충돌이 발생할 수 있습니다. 그래서, 따라야 할 특별한 절차가 있습니다.
Let’s Encrypt 설치 전송
첫째, 새로운 서버에 Encrypt를 설치해야 합니다. Ubuntu 16.04의 경우 다음과 같습니다.
add-apt-repository ppa:certbot/certbot
apt-get update
apt-get install python-certbot-apache
CentOS 7의 경우 다음 명령을 사용하십시오.
yum install epel-release
yum install python-certbot-apache
어느 배포판에도 설치되면 cron을 설정하여 인증서를 자동 갱신하십시오. 실행을 통해 이를 설정할 수 있습니다.
crontab -e
루트 사용자로. 우분투 컴퓨터의 cron은 다음과 같습니다.
45 2 * * 6 /usr/bin/certbot renew && systemctl reload apache2
CentOS 서버에서 다음과 같이 보입니다.
45 2 * * 6 /usr/local/letsencrypt/certbot-auto renew && systemctl reload httpd
다음으로, 설정 파일을 저장하는 전체 / etc / letsencrypt 디렉토리를 가져올 수 있습니다. 이 디렉토리는 인증서와 키를 보유합니다. 새 서버에서 다음을 실행합니다.
rsync -avz 123.45.67.89:/etc/letsencrypt /etc/
이제 파일이 준비되었으므로 Encrypt로 다시 동기화 한 모든 인증서를 다시 설치할 수 있습니다.
/usr/local/letsencrypt/certbot-auto install --apache
명령을 실행하면 /etc/letsencrypt 폴더에 인증서의 번호가 매겨진 목록이 나타납니다. 구성을 설정하려는 사이트의 번호를 선택하면 구성 파일이 생성됩니다. 완료되면 Apache를 다시 로드 하기 만하면 됩니다.
systemctl reload apache2 #ubuntu
systemctl reload httpd #centos
4 단계 : 작동 확인
새로운 서버는 이제 이 기사에서 설명하는 호스트 파일 수정을 사용하여 테스트 할 수 있습니다. 마이그레이션 대상의 기능을 테스트하는 최선의 방법은 브라우저와 서버 모두 실제 도메인 이름에서의 실제 트래픽이라고 생각하기 때문입니다.
호스트 파일을 설정하고 DNS 캐시를 플러시 한 후에는 브라우저에서 https를 사용하여 웹 사이트를 로드하고 대상 컴퓨터에서 원래 인증서로 보안 된 웹 사이트를 볼 수 있습니다. 실시간 트래픽은 동일한 SSL을 사용하여 원본 서버로 계속 라우트되므로 사이트 방문자는 테스트를 알 수 없습니다.
SSL 설치 테스트가 끝나고 웹 사이트가 새 서버에서 제대로 작동하는지 확인한 후 마이그레이션 된 사이트의 DNS를 업데이트하여 새 서버가 작동하도록 할 수 있습니다.
Let’s Encrypt를 사용하는 경우 인증서 만료 날짜를 기억하는 것이 중요합니다. 예를 들어 인증서가 7 일 후에 만료 될 예정인 경우 새 서버가 인증서 갱신을 대신 할 수 있도록 전송 후 즉시 DNS를 업데이트 해야 합니다. 이 창을 놓치고 소스 서버에서 인증서를 갱신하면 /etc/letsencrypt를 수집 한 rsync 명령을 다시 실행할 수 있습니다.
rsync -avz 123.45.67.89:/etc/letsencrypt /etc/
- 이전글PHP로 기계 학습을 위한 라이브러리. 19.07.28
- 다음글인증서를 다른 서버로 이동 - Let's Encrypt 19.07.26