별건 아니고 socket 통신을 해야하는 ssl을 써야 한단다. 그래서 사설 ssl하나 만들어서 서버에 하나 클라에 하나 해서
테스트를 했는데... 사설은 기본적으로 trust를 양쪽에 다 박아야 해서 공인 올때까지 기다리고 있었는데...
어쩌다보니 재수없으면 SSL을 안줄수도 있는 것 같다. 까다로운 놈들 같으니
그래서 공짜 SSL로 해보라고 해서 했던 기록이다.
3개월마다 귀찮게 갱신해야하는 공짜 SSL이다. 그래도 공짜인게 어디냐.
그래서 하는법을 찾다보니 꽤 까다롭더라. 사람마다 다 다르고... 그래서 미리 정리한다.
조건: CentOS 7.4
apache 깔지 않음(알아서 깔아줌)
주의 :
80포트가 열려 있어야 함.
DNS가 있어야 한다
우선 EPEL repository를 등록해야 한다.
yum -y install yum-utils epel-release
yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional
<뭔가 잔뜩 등록>
다음에 CertBot을 설치해야 한다. 이게 SSL 프로그램이다.
yum install -y certbot python2-certbot-apache
<필요한 파이썬과 아파치까지 다 깔아준다>
다음에 설치된 httpd 아파치에 설정을 조정한다. 이는 SSL등록을 위한 80포트와 DNS를 등록하기 위함이다.
무조건 있어야 한다. 사실 없어도 되는 방법이 있긴한데 더럽게 복잡하다. 그냥 관두자.
<80포트와 DNS는 필요하다는 더러운 세상>
80포트야 공유기에서 포트포워딩 하면 되는데. DNS는 어쩌냐고??
<asus 공유기의 ddns 지원기능>
어지간하면 공유기가 해준다. 하나를 등록해서 쓰자. 불만이면 dns 주시등가 그런데 공유기안에 공유기면 어쩌냐고? ... 묵념.
자 어쨋든 아파치 설정을 바꾸자. 자동 설치시에는 /etc/httpd/conf/httpd.conf 에 있다. conf.module.d에도 해도 되지만 뭐 그건 알아서..
vi /etc/httpd/conf/httpd.conf
그리고 아래에 다음과 같이 넣어준다
<VirtualHost *:80>
DocumentRoot <디렉토리 하나 만들고 그 경로>
ServerName <공유기 DNS이름>
</VirtualHost>
<Directory <디렉토리 하나 만들고 그 경로>>
Require all granted
</Directory>
<디렉토리는 원하는 경로로 잡고 DNS는 공유기에서 만든 경로를 잡았다>
SSL 설정 권한들을 위해서 아파치에 디렉토리 권한을 줘야 한다.
그래서 추가 설정을 했다
chown -R apache:apache /www/
자 어느정도 준비가 되었으면 혹시나 싶으니 httpd를 끄자
systemctl stop httpd
다음 ssl을 만들어 보자
certbot --apache
우선 그림을 보자
<SSL 만드는 과정>
1.은 등록할 자기 메일 주소이다. 이 메일 기준으로 움직이며 만일 메일을 새로 하고싶다면 certbot unregister로 지우면 된다
2.는 A 처리
3.은 별 필요없으니 N
4.는 아까 httpd.conf에 등록한 DNS이름이 잡히므로 그걸 처리하면 된다. 나는 하나뿐이니 1로 설정
5.는 http를 자동 ssl로 리다이렉트 해줄거냐 라는건데 소켓을 쓸 것이므로 별 필요없어서 1로 했다.
첫번째 에러는 아파치가 꺼져있어서 뜨는 에러라 지가 알아서 켜니 신경안써도 되고, 두번째도 리다이렉트 안된다는 소리니 무시해도 된다.
그리고 아래 콩규레츄레이션이라고 된걸 보면 만들어 졌다.
이제 만들어졌는지 가보자 /etc/letsencrypt/live 이다
cd /etc/letsencrypt/live
<live 밑에가면 해당 dns로 디렉토리가 있다. 거기 들어가면 pem이 존재한다>
이제 pem은 있으니 privkey를 한번 열어서 잘 되었는가 보자
openssl rsa -check -in privkey.pem
<잘 된거 같다>
내친김에 완료일 3달도 확인해 보자
openssl x509 -in ./fullchain.pem -noout –dates
<3달짜리 확인>
이제 JKS를 만들어야 한다. fullchain.pem을 기준으로 만들 것이다.
1.pfx파일 생성
openssl pkcs12 -export -name <dns이름> -in ./fullchain.pem -inkey ./privkey.pem -out ./cert.pfx -password pass:<비번>
<pfx가 만들어졌다>
2. jks 생성
keytool -deststorepass <비번> -destkeypass <비번> -srcstorepass <비번> -importkeystore -srckeystore ./cert.pfx -srcstoretype pkcs12 -destkeystore ./cert.jks -deststoretype jks
<jks가 만들어진 것을 확인>
이제 다 끝났다 이걸 소켓 서버에 갖다놓고 돌려보자
<잘되네>
잘 되는것을 확인했다.
그러면 3달마다 어떻게 할 것인가인데 다음 명령은 이 키를 갱신시켜주는 명령어 이다.
certbot renew
즉 crontab을 가지고 정기적으로 이를 돌리면 될 것 같다.
1. 평소에는 아파치를 끄고 방화벽으로 80과 443을 막는다.
2. 동작할 때가 되면, 아파치를 켜고 80과 443을 연다.
3. certbot renew를 실행한다.
4. 위의 jks를 만드는 명령을 실행하여 jks를 업데이트 한다.
5. 서비스를 껐다 켠다.
6. 아파치를 끄고 방화벽으로 80과 443을 막는다.
요정도가 될 것 같다.
최근 덧글