KDT/Cloud

240223 Cloud - HTTPS

001cloudid 2024. 2. 23. 12:52
728x90

Let's Encrypt를 통한 SSL/TLS 인증서 생성

  1. https://letsencrypt.org
    - 인증 절차가 단순해서 단 한 줄 명령어로 인증서 발급이 가능
    - 발급 대기 시간 없이 바로 발급
    - nginx, apache와 같은 웹 서버에 맞추어 자동 옵션이 설정되도록 설치 가능
    - 인증 유효기간이 90일(자동으로 인증 갱신 가능)
    - 무료
  2. AWS -> EC2 인스턴스 생성
    - 이름 : SecureWeb
    - AMI : Kenel5
    - 인스턴스 유형 : t2.micro
    - 키페어 : 기존
    - 기존 보완 그룹 선택 : ssh, web
    -> 인스턴스 시작
  3. MobaXterm 원격 접속
  4. 아파치 웹 서버 설정
    sudo yum install -y httpd
    sudo systemctl start httpd
    sudo vi /var/www/html/index.html
    => S2.itwillbs.com(그림1 좌, 우)
  5. Certbot 설치
    - Let's Encrypt는 ACME 프로토콜을 사용하여 설정한 도메인명의 유효성을 확인하고,
     인증서를 발급
     ※ACME(Automatic Certification Management Environoment)
    - Let's Encrypt CA(Certificate Authority)로부터 SSL/TLS 인증서를 발급 받고 싶다면 ACME 클라이언트 소프트웨어
      설치해야함
    - Let's Encrypt에서는 그 중 사용하기 편리한 Certbot의 사용을 권장함
    sudo amazon-linux-extras install epel -y
    sudo yum install -y certbot
    certbot --version
    certbot --help => 발급에 대한 옵션을 볼 수 있음 ex) --nginx, --apache, --standalone, --webroot, --manual 등
  6. Let's Encrypt SSL/TLS 인증서 발급
    1) webroot 2) 사용하는 웹 서버의 인증서를 발급 3) Standalone 4) DNS
    webroot를 이용해서 수동으로 인증서 발급 받기
    - 사이트 디렉토리 내에 인증서 유효성을 확인할 수 있는 파일을 업로드하여 인증서를 발급 받는 방법
    - 서버 내에 .well-known 디렉토리가 있을 곳을 지정
      특정 폴더를 만들고 폴더에서 letsencrypt.conf파일을 만들고 이를 웹 서버 설정 파일에서 읽어옴
      sudo mkdir -p /var/www/letsencrypt/.well-known/acme-challenge
      => -p 옵션으로 폴더가 없으면 자동으로 만들어줌. acme-challenge 디렉토리를 생성
      sudo certbot certonly --webroot --webroot-path=/var/www/letsencrypt -d s2.itwillbs.com -m 실제쓰는이메일주소
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Please read the Terms of Service at
    https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf. You must
    agree in order to register with the ACME server. Do you agree?
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    (Y)es/(N)o: y
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Would you be willing, once your first certificate is successfully issued, to
    share your email address with the Electronic Frontier Foundation, a founding
    partner of the Let's Encrypt project and the non-profit organization that
    develops Certbot? We'd like to send you email about our work encrypting the web,
    EFF news, campaigns, and ways to support digital freedom.
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    (Y)es/(N)o: y

    => 해당 경로에 .well-know과 관련된 파일이 없다는 404 not found 에러 발생

    에러해결
    왼쪽의 Sessions -> SecureWeb 더블 클릭 -> 새로운 접속 탭을 생성
    -> 첫 번째 접속 탭
    sudo certbot certonly --manual --email 이메일 -d s2.itwillbs.com
    => Create a file containing just this data:
    X0d5hIzhsrbJyxu6qFUZaJLP7IAdmVMlvIpJJoatSV0.yxxsXfcESAvyjwGbz02A-OSOQSyYJQxnUwb0D4bwzf8
    위의 내용을 복사
    -> 두 번째 접속 탭
    sudo -sE
    cd /var/www/html
    mkdir -p .well-known/acme-challenge
    ls -a => .well-known 디렉토리 확인
    cd .well-known/acme-challenge
    sudo vi X0d5hIzhsrbJyxu6qFUZaJLP7IAdmVMlvIpJJoatSV0(복사한 앞부분까지)
    i를 눌러 insert mode로 변경하고 전체를 내용으로 붙여넣기
    X0d5hIzhsrbJyxu6qFUZaJLP7IAdmVMlvIpJJoatSV0.yxxsXfcESAvyjwGbz02A-OSOQSyYJQxnUwb0D4bwzf8
    esc :wq

    웹브라우저에
    s2.itwillbs.com/.well-known/acme-challenge/X0d5hIzhsrbJyxu6qFUZaJLP7IAdmVMlvIpJJoatSV0 입력하면 data의
    모든 내용이 화면에 보임(그림 2)
    => certbot이 원하는 경로
    's2.itwillbs.com/.well-known/acme-challenge/X0d5hIzhsrbJyxu6qFUZaJLP7IAdmVMlvIpJJoatSV0'의 파일이
    생성되었으므로 data를 확인해서 인증서를 발급

    -> 첫 번째 접속 탭으로 이동해서 엔터키를 입력

  7. Apache에 추가 설정
    sudo vi /etc/httpd/conf/httpd.conf
    ==============================================================
    :set nu
    i를 눌러 insert mode 내용 추가 가장 마지막 라인에 추가
    364 <VirtualHost *:80>
    365         DocumentRoot /var/www/html
    366         ServerName itwillbs.com
    367         ServerAlias s2.itwillbs.com
    368 </VirtualHost>
    369 <VirtualHost 18.208.131.107:443>
    370         DocumentRoot /var/www/html
    371         ServerName s2.itwillbs.com
    372
    373         SSLEngine on
    374         SSLCertificateFile /etc/letsencrypt/live/s2.itwillbs.com/cert.pem
    375         SSLCertificateKeyFile /etc/letsencrypt/live/s2.itwillbs.com/privkey.pem
    376         SSLCACertificateFile /etc/letsencrypt/live/s2.iwillbs.com/fullchain.pem
    377 </VirtualHost>
    esc :wq
    ==============================================================

    Apache에서 SSL 접속 시 참고(사용)하는 설정 파일 /etc/httpd/conf.d/ssl.conf 수정
    sudo yum install -y certbot python2-certbot-apache
    =>  mod_ssl.x86_64 1:2.4.58-1.amzn2 설치
    sudo vi /etc/httpd/conf.d/ssl.conf
    100번 라인
    SSL.conf에서 지정된 위치가 있으므로 letsencrypt를 통해 다운로드 받은 인증서를 지정된 위치로 복사
    esc :q

    sudo cp /etc/letsencrypt/live/s2.itwillbs.com/cert.pem /etc/pki/tls/certs/cert.crt
    sudo cp /etc/letsencrypt/live/s2.itwillbs.com/privkey.pem /etc/pki/tls/private/privkey.key
    sudo cp /etc/letsencrypt/live/s2.itwillbs.com/fullchain.pem /etc/pki/tls/certs/

    sudo vi /etc/httpd/conf.d/ssl.conf
    100 SSLCertificateFile /etc/pki/tls/certs/localhost.crt
    => 100 SSLCertificateFile /etc/pki/tls/certs/cert.crt로 변경
    107 SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
    => 107 SSLCertificateKeyFile /etc/pki/tls/private/privkey.key로 변경
    esc :wq

  8. 아파치 웹 서버 재시작
    sudo systemctl restart httpd
  9. EC2 보안그룹 -> web -> 인바운드 규칙 추가
    -> HTTPS 포트번호 : 443(자동입력, 변경불가), 사용자 지정 : anywhere-IPv4(0.0.0.0/0, 모든 IP 허용)
  10. 웹 브라우저에서 https://s2.itwillbs.com(그림 3.)

그림 1.
그림 2.
그림 3.

 

728x90

'KDT > Cloud' 카테고리의 다른 글

240315 Cloud - Git & GitHub 2  (0) 2024.03.15
240308 Cloud - Git & GitHub 1  (0) 2024.03.08
240216 Cloud  (0) 2024.02.16
240202 Cloud  (0) 2024.02.02
240124 Cloud  (0) 2024.01.24