mv .idea /tmp/.idea_old

git rm -r .idea 

git commit -m "Remove .idea"

mv /tmp/.idea_old .idea


mv .gradle /tmp/.gradle_old

git rm -r .gradle 

git commit -m "Remove .gradle"

mv /tmp/.gradle_old .gradle




자주 사용하는 명령어 모음


  • 비주얼 스튜디오 코드(VS Code) 권한 문제 에러
    • 관련 로그: Could not create temporary directory
    • 해결방법: 

      sudo chown -R kjlee:staff ~/Library/Caches/



교회 홈페이지에 SSL 인증서 적용하려다가 하루종일 삽질한 이야기.

 

0. 참고 블로그

 

1. 적용(삽질) 히스토리

1.1 삽질 이유

  • 아마존 Lightsail을 이용해서 Wordpress를 설치하면, Bitnami 패키지를 사용하여 설치가 된다.
    • 설치 위치: /opt/bitnami/apache
    • Bitnami Wordpress : 유명한 무료 APM 툴 중 하나
      • https://bitnami.com/stack/wordpress
      • APM : Apache + PHP + MySQL
  • 아마존 Lightsail에 이미 또다른 Apache2가 설치되어 있었다.
    • 설치 위치: /etc/apache2
  • certbot 공식 메뉴얼을 사용하면 /etc/apache2 설정을 참고하여 SSL 인증서 발급을 시도한다.
    • /etc/apache2 설정에서는 현재 설정된 웹서비스가 없으므로 정상적으로 처리되지 않는다.
    • 에러 발생 --> No names were found in your configuration files. Please enter in your domain
  • 결론은 bitnami wordpress 에 SSL 인증서를 발급받기 위해서는 bitnami 공식 문서를 참고해야 했고, 나는 이것을 이번에 처음 알았다. (공식문서가 있다는 것도...)

 

1.2 삽질 히스토리 

  • certbot 공식 메뉴얼 적용 --> 실패
    • 인터넷에서 한글로 검색하면 대부분 certbot 또는 certbot-auto 에 대해서만 나옴.
    • certbot-auto 의 최신버전이 certbot
      • certbot-auto는 구버전이고, 설정이 복잡함.
    • 2019년 2월 보안 이슈 발생 : TLS-SNI-01 취약점 발견됨
      • 2019년 2월 13일부터 certbot 에서는 더이상 TLS-SNI-01 지원하지 않는다고 함.
      • --> 최신버전의 certbot 사용 필수!
  • bitnami wordpress 공식 메뉴얼 적용 --> 성공
    • lego 사용함.
    • lego --tls 옵션 시 TLS-ALPN-01 사용함.
    • bitnami 커뮤니터에서는 최신 lego(2.1.0) 사용하면 괜찮다는 의견이 있으나  2019년 2월 13일 이후에 다시 확인이 필요함.

 

2. Bitnami 용 Apache 전용 메뉴얼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# 1단계:레고 클라이언트 설치
cd /tmp
curl -s https://api.github.com/repos/xenolf/lego/releases/latest | grep browser_download_url | grep linux_amd64 | cut -'"' -4 | wget --
tar xf lego_vX.Y.Z_linux_amd64.tar.gz
sudo mv lego /usr/local/bin/lego
 
# 2단계:도메인에 대한 권한 부여 인증서 생성
# - Turn off all Bitnami services:
sudo /opt/bitnami/ctlscript.sh stop
 
sudo lego --tls --email="MyID@gmail.com" --domains="도메인명" --domains="www.도메인명" --path="/etc/lego" run
 
# - Now it be generated in the /etc/lego/certificates directory.
 
# 3단계:웹 서버가 인증서를 사용하도록 구성
# - 사용 중인 웹 서버에 따라 새 SSL인증서 및 인증서 키 파일을 올바른 위치에 연결합니다. 
# - 파일 권한을 업데이트하여 루트 사용자만 읽을 수 있도록 합니다. 
 
## Apache의 경우:
sudo mv /opt/bitnami/apache2/conf/server.crt /opt/bitnami/apache2/conf/server.crt.old
sudo mv /opt/bitnami/apache2/conf/server.key /opt/bitnami/apache2/conf/server.key.old
sudo mv /opt/bitnami/apache2/conf/server.csr /opt/bitnami/apache2/conf/server.csr.old
sudo ln -/etc/lego/certificates/도메인명.key /opt/bitnami/apache2/conf/server.key
sudo ln -/etc/lego/certificates/도메인명.crt /opt/bitnami/apache2/conf/server.crt
sudo chown root:root /opt/bitnami/apache2/conf/server*
sudo chmod 600 /opt/bitnami/apache2/conf/server*
 
## NGINX의 경우:
sudo mv /opt/bitnami/nginx/conf/server.crt /opt/bitnami/nginx/conf/server.crt.old
sudo mv /opt/bitnami/nginx/conf/server.key /opt/bitnami/nginx/conf/server.key.old
sudo mv /opt/bitnami/nginx/conf/server.csr /opt/bitnami/nginx/conf/server.csr.old
sudo ln -/etc/lego/certificates/DOMAIN.key /opt/bitnami/nginx/conf/server.key
sudo ln -/etc/lego/certificates/DOMAIN.crt /opt/bitnami/nginx/conf/server.crt
sudo chown root:root /opt/bitnami/nginx/conf/server*
sudo chmod 600 /opt/bitnami/nginx/conf/server*
 
## 모든 Bitnami서비스를 다시 시작
sudo /opt/bitnami/ctlscript.sh start 
 
# 4단계:구성 테스트
# - you can test it by browsing to https://도메인명 
# -> Bitnami응용 프로그램의 보안 시작 페이지가 표시됩니다. 브라우저 주소 표시줄에서 자물쇠 아이콘을 클릭하면 도메인 및 SSL인증서의 세부 정보가 표시됩니다.
 
# 5단계:인증서 갱신
# - 인증서는 90일 동안만 유효
# - 인증서가 만료되기 전에 자동으로 갱신하려면 위의 작업을 수행하는 스크립트를 작성하고 스크립트를 주기적으로 실행하도록 cron작업을 예약하십시오.
 
sudo vi /etc/lego/renew-certificate.sh
# --------------
#!/bin/bash
 
sudo /opt/bitnami/ctlscript.sh stop apache
sudo /usr/local/bin/lego --tls --email="MyID@gmail.com" --domains="도메인명" --domains="www.도메인명" --path="/etc/lego" renew
sudo /opt/bitnami/ctlscript.sh start apache
# --------------
 
sudo chmod +/etc/lego/renew-certificate.sh
 
sudo crontab -e
# ---------------
0 0 1 * * /etc/lego/renew-certificate.sh 2> /dev/null
# ---------------
 
# HTTPS redirect
vi /opt/bitnami/apps/wordpress/conf/httpd-prefix.conf
# ---------------
RewriteCond %{HTTPS} !=on
RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [R=301,L]
# ---------------
 
vi /opt/bitnami/apps/wordpress/htdocs/wp-config.php
# ---------------
# original 
# define('WP_SITEURL', 'http://' . $_SERVER['HTTP_HOST'] . '/');
# define('WP_HOME', 'http://' . $_SERVER['HTTP_HOST'] . '/');
# http to https
define('WP_SITEURL''https://' . $_SERVER['HTTP_HOST'] . '/');
define('WP_HOME''https://' . $_SERVER['HTTP_HOST'] . '/');
# ---------------
# apache server restart
sudo /opt/bitnami/ctlscript.sh restart apache
cs
 

 

3. Let's Encrypt (certbot) 공식 메뉴얼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 패키지 설치
$ sudo apt-get update
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository universe
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install certbot python-certbot-apache 
 
# SSL 인증서 발급
## - 1.1 인증서를 발급 받고 자동으로 Apache 설정 파일까지 수정.
$ sudo certbot --apache
 
## - 1.2 인증서를 발급 받은 뒤에 직접 설정하는 방법
# sudo certbot --apache certonly
 
## - 2.1 이메일 주소를 묻는 메세지 -> 올바른 메일 주소를 입력
## - 2.2 동의하는지 묻는 메세지 ->  A를 입력
## - 2.3 이메일 주소를 공유하고자 하는지 묻는 내용 -> N
## - 2.4 생성하고자 하시는 도메인을 선택하는 부분 
## -   -> 도메인에 해당되는 숫자 번호를 입력. 
## -      만약 전체 도메인에 적용하고자 하시는 경우 빈칸으로 남겨주시고, 
## -      원하시는 도메인을 콤마(,) 또는 스페이스로 분리하여 입력해 주시면 됩니다.
## -      입력한 도메인: 도메인명 www.도메인명
## - 2.5 위의 정보가 모두 입력되면 자동으로 SSL 인증서가 생성되게 됩니다.
 
# renewal test
$ sudo certbot renew --dry-run
 
# 자동 갱신 (root 계정)
# ---------------
0 0 1 * * /bin/bash --'certbot renew --quiet'
# ---------------
 
# 갱신후 바로 적용을 위해서 아파치를 다시 시작해 주시는것이 좋습니다.
# ---------------
0 2 * * * sudo certbot-auto -q renew && /etc/init.d/apache2 restart
# ---------------
cs

 

 

4. 기본 지식

4.1 인증서 등록 기관

  • Let's Encrypt - TLS 인증서를 무료로 발급해 주는 비영리기관.
  • 발급된 인증서는 유효기간이 90일이며, 만료 30일 전부터 갱신할 수 있다. 갱신 가능 횟수는 무제한.
  • 등록 관련 매뉴얼: https://certbot.eff.org/lets-encrypt/ubuntuxenial-apache
 

4.2 인증서 발급 방식 : 추천 인증서 발급 프로그램은 certbot 

  1. standalone
    • standalone 명령어를 사용하면 certbot에 내장된 웹 서버를 이용해서 도메인만으로 인증서가 발급 되고, 갱신 절차도 자동으로 처리된다. 
    • *.example.com 형태의 와일드카드 서브 도메인 인증서는 발급할 수 없다.
  2. webroot
    • webroot 명령어를 사용하면 자신의 웹 서버에서 작동중인 웹사이트를 이용해서 인증서를 발급하고, 갱신 절차도 자동으로 처리된다. 
    • *.example.com 형태의 와일드카드 서브 도메인 인증서는 발급할 수 없다.
  3. dns
    • 도메인이 연결된 DNS에 TXT 레코드를 생성해서 인증서를 발급하는 방식으로, 인증서 발급 과정에 웹 서버가 필요 없고 *.example.com 형태의 와일드카드 서브 도메인 인증서를 발급할 수 있다. 
    • 다만 매번 인증서를 갱신할 때마다 DNS에 TXT 레코드를 새로 생성해야 하므로, 외부에서 TXT 레코드를 입력할 수 있도록 DNS가 API를 제공하는 경우에만 갱신 과정을 자동으로 처리할 수 있다.

4.3 가장 간단한 방식

  • - 서트봇 홈페이지로 들어가서 자신의 서버 사양을 선택하면 설명 화면이 나온다.
  • - 문서를 읽으면서 터미널에 명령어를 친다.
  • - 몇몇 정보를 입력하면 알아서 설정해주고, 3개월 마다 갱신도 자동으로 해준다.
  • - 참 쉽죠?

4.4 SSL 인증서 파일 

  • certbot 으로 발급한 인증서
    • 파일 위치 : /etc/letsencrypt/live/
    • 발급된 파일
      • privkey.pem : 인증서를 위한 비밀키 파일입니다.
      • fullchain.pem : 인증서와 체인 인증서가 합쳐진 전체 파일입니다. 대부분의 서버 소프트웨어에서 사용됩니다.
      • chain.pem : Nginx >=1.3.7에서 OCSP stapling을 위해서 사용됩니다.
      • cert.pem : 생성된 인증서 파일입니다.
  • lego 로 발급한 인증서 
      • 파일 위치 : /etc/lego/certificates/
      • 발급된 파일
        • 도메인명.key
        • 도메인명.crt

 

5. 테스트 

테스트 결과 : 
 

 

6. 3개월마다 갱신 (수동 처리 필요)

- crontab이 제대로 동작하지 않아 수동으로 명령어 실행해야 했다.
sudo /etc/lego/renew-certificate.sh​

'IT > Server' 카테고리의 다른 글

[LigthtSail] 인스턴스 업스레이드 방법  (0) 2018.11.06
[LightSail] 개발 팁  (0) 2018.11.06

+ Recent posts