개발 블로그

[교육] SSL 설정하기 본문

리눅스 | 서버

[교육] SSL 설정하기

토도 2024. 6. 28. 18:11

 

mod_ssl.so 설치 및 적용
1) httpd -l 로 검색(https://openlife.tistory.com/272)
mod_ssl.c 면 정적으로설치된것
mod_so.c면 동적으로 설치된 것으로 modules에 mod_ssl.so가 있는지 확인
없다면 apache configure 부터 ssl 적용해서 다시 설치(아파치 자동설치는 yum install mod_ssl https://waspro.tistory.com/383)
2) mod_ssl.so를 설정(mod_ssl.so가 생성되어도 LoadModule을 수동으로 설정해야 함)
LoadModule ssl_module   modules/mod_ssl.so

 

여기 암것도 없으면 ssl_module을 옵션으로 줘서

다시 아파치를 삭제하고 새로 config하거나

다운받아서 추가 해줘야함 

 

나는 전자..  

 

Certbot 설치

 

(1) EPEL 리포지터리 추가

yum install epel-release -y

 

(2) Certbot 

yum install certbot -y

 

(3) mod_ssl

yum install mod_ssl 명령어 해주고

 

SSL 인증서 및 개인 키 생성:

OpenSSL을 사용하여 SSL 인증서(certificate.crt)와 개인 키(private.key)를 생성합니다. 

 

Self-Signed 인증서기 때문에 어떤 브라우저가 인식하지 못하는 기관이기 때문에

여전히 브라우저 경고문이 뜨지만 연습용으로 하는거니까 ~

openssl req -x509 -nodes -newkey rsa:2048 -keyout private.key -out certificate.crt -days 365 -subj "/CN=vitamin.com"
  • -x509: Self-Signed 인증서를 생성하는 옵션입니다.
  • -nodes: 인증서와 개인 키를 암호화하지 않도록 지정합니다.
  • -newkey rsa:2048: RSA 알고리즘과 2048 비트의 개인 키를 생성합니다.
  • -keyout private.key: 생성된 개인 키를 저장할 파일명입니다.
  • -out certificate.crt: 생성된 SSL 인증서를 저장할 파일명입니다.
  • -days 365: 인증서의 유효 기간을 설정합니다. 예제에서는 365일로 설정하였습니다.
  • -subj "/CN=vitamin.com": 인증서의 공통 이름(Common Name)을 vitamin.com으로 설정합니다.

명령어를 실행하면 OpenSSL이 요구하는 정보를 입력하라는 메시지가 나타납니다.

필요한 정보를 입력하고 나면 private.key와 certificate.crt 파일이 생성됩니다.

 

SSL 인증서 및 개인 키 생성:

[root@localhost ~]# openssl req -x509 -nodes -newkey rsa:2048 -keyout private.key -out certificate.crt -days 365 -subj "/CN=vitamin.com"

 

나는  vitamin.com 으로 도메인을 설정했음.. 

 

vi /etc/hosts 

호스트 파일을 수정하여 특정 도메인을 127.0.0.1로 매핑하는 방법은 다음과 같다

 

localhost는 로컬 디바이스에서 사용되는 도메인 이름이며, 127.0.0.1은 현재 기기의 로컬 IP 주소를 의미함

 

 


 

DNS 캐시 비우기: 변경 사항이 즉시 반영되지 않을 경우, DNS 캐시를 비우고

시스템에 새로운 DNS 정보를 적용할 수 있습니다

CentOS 7에서 DNS 캐시를 비우는 방법은 사용하는 DNS 캐싱 서비스에 따라 다를 수 있습니다.

보통 사용되는 서비스는 nscd (Name Service Cache Daemon) 또는 dnsmasq입니다

 

1. nscd 사용 시

sudo systemctl restart nscd

 

2. dnsmasq 사용 시

sudo systemctl restart dnsmasq


 

vi /engine/apache/conf/httpd.conf

 

편집기로 들어가

 

httpd.conf 파일에는

지난 아파치 톰캣 연동으로 VirtualHost 설정이 되어있는데 바로 밑에 443 설정도 추가하기

# 새로운 가상 호스트 설정 추가
<VirtualHost *:80>
    ServerName localhost
    DocumentRoot "/engine/apache2.4/htdocs"

    # 정적 파일을 제공할 경로 설정
    <Directory "/engine/apache2.4/htdocs">
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>

    # 특정 파일 형식의 요청을 Tomcat으로 전달
    JkMount /*.jsp worker1
    JkMount /*.do worker1
    JkMount /*.json worker1
    JkMount /*.xml worker1
</VirtualHost>

 

<VirtualHost *:443>
    ServerName vitamin.com
    DocumentRoot "/engine/apache2.4/htdocs"

    SSLEngine on
#    SSLProtocol all -SSLv2
#    SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW

    SSLCertificateFile "/engine/apache2.4/ssllib/certificate.crt"
    SSLCertificateKeyFile "/engine/apache2.4/ssllib/private.key"

    # 기타 SSL 관련 설정 (옵션)

    # 정적 파일을 제공할 경로 설정
    <Directory "/engine/apache2.4/htdocs">
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>

    # 특정 파일 형식의 요청을 Tomcat으로 전달
    JkMount /*.jsp worker1
    JkMount /*.do worker1
    JkMount /*.json worker1
    JkMount /*.xml worker1
</VirtualHost>

 

(주석으로 막은거는 부장님이 보내주신 코드인데 주석으로 막아도 문제 없이 작동한다)

 

앞선 인증 파일 인증 키 파일 위치 맞는지 제대로 작성해주고 

 

apachectl configtest로 작성 오류같은게 없는지 검사하기

 

아파치 작동은 되는데요.. 

 

[root@localhost ~]# netstat -tuln | grep :443
[root@localhost ~]# netstat -tuln | grep :80

 

아니 그런데 아파치 80포트는 켜져도 443포트가 아무리 해도 안켜지는 것이다~~~

 

 

여기에 Listen 443을 적었더니 정상적으로 ssl이 작동하기 시작했다