Linux

NGINX로 SSL 인증서 등록해보기

graph-dev 2024. 4. 6. 19:26
728x90

GPT로 생성한 nginx 인증서 그림

 

간만에 가비아에서 유료 SSL 인증서를 구입했습니다.

 

가격은 4만 4천원(부가세 포함)입니다.

 

나름 제일 싼 거를 선택했고, 딱히 멀티도메인 인증서는 아니라 가볍게 테스트할 용도로 구입했습니다.

 

이렇게 나오는 경우가 많은데, HTTP 설정만 하면 아래와 같이 나타납니다.

 

검색해보면, 무료인증서인 openssl & let's encrypt로 충분할 거 같지만, 그런 인증서는 실제로 확인해보면 안전하지 않다고 나타나기도 한다네요. 주로 [인증서가 올바르지 않음]이 뜹니다. 이런게 불편합니다.

 

https://docs.3rdeyesys.com/compute/ncloud_compute_lemp_nginx_ssl_setting_centos_guide.html

 

CentOS에서 NginX SSL 인증서 설정하는 방법

Ncloud CentOS 서버에 NginX SSL 인증서를 설정하는 방법입니다

docs.3rdeyesys.com

 

그래서 샀습니다. 아래와 같은 상품입니다.

 

 

 

이제, 작업을 진행합니다. 도메인도 하나 구입했습니다. graphdev.store 이렇게 되어있습니다.

 

실제 작업을 하게되면, 유료 인증서를 받아서 등록하는 경우가 있습니다. 근데 관련 자료가 생각보다 적어서 정리해보았습니다.

 

 

인증서를 사더라도, 바로 사용할 수는 없고 인증을 받아야합니다. 저는 아래와 같이, DNS 인증방식을 선택합니다.

 

이 방식은 간단하게 말하면, 해당 도메인이 등록된 곳에서 인증을 위해 생성된 고유값을 TXT 레코드에 등록하는 것입니다. 그러면 인증완료가 되고, 사용할 준비가 된 것입니다.

 

 

 

 

빠르게 이제 서버를 만들고, 공인 IP를 부여합니다. 그리고, 해당 공인 IP를 원하는 도메인에 A 레코드로 등록합니다. TTL은 600으로 해주었습니다.

 

 

 

참고로 @는 앞에 아무것도 없는 경우고, www가 있다면 www + 도메인 주소가 되겠죠.

 

이제 서버에 접속합니다. Cent OS 7.8을 기준으로 생성했습니다.

 

Nginx 설치하기

아래 사이트를 참고하여 빠르게 설치해줍니다. 바로 설치는 안되었고, 사이트에 나온대로 yum.repos.d에 있는 nginx.repos 파일을 작성하니 설치가 되었습니다.

sudo yum install -y nginx

 

 

설치가 되었다면, 이제 인증서를 내려받은 것을 확인합니다.

 

인증서 파일을 요청합니다.

 

 

총 세개의 파일입니다. 이 인증서는 도메인, 체인, 루트 인증서 세 가지를 가지고 있습니다. 아래 명령어로 간단히 합쳐보겠습니다.

인증서 파일

 

도메인은 graphdev.store이지만 설치시 www 옵션을 주어보니 이렇게 나옵니다. 위에서부터 domain, chain, root 인증서 파일이고 마지막은 개인키 파일입니다.

 

이걸 이제 서버로 옮겨보겠습니다. scp라는 명령어를 사용합니다.

 

# 현재 인증서가 저장된 경로로 이동
scp ./* [아이디]@[서버 공인아이피]:/home/[아이디 홈경로]

 

물론, 위에서 가비아로 A 레코드로 등록해준다면 좀 더 쉽게 명령어를 작성할 수 있습니다. 제가 산 도메인이 graphdev.store 라고 가정하면 서버 공인 아이피 자리에 이 도메인 명인 graphdev.store를 넣으면 됩니다. 혹은 저처럼 www도 레코드명으로 추가하면 www.graphdev.store 를 넣을 수도 있습니다.

scp ./* graph@graphdev.store:/home/graph

 

이제 서버의 비밀번호만 입력하면 손쉽게 파일을 복사해서 서버로 업로드합니다.

 

추가로 루트 디렉토리에서 ssl이라는 경로를 만들어 이동했습니다.

 

 

 

그 다음은 인증서 합치기입니다. cat이라는 명령어가 이렇게 하면 바로 합쳐진다고 합니다. 아주 편리합니다.

cat domain.crt domain_chain.crt root.crt > fullcert.crt

 

https://idchowto.com/nginx-ssl-설정-인증서-합치기/

 

 

 

 

 

비슷한 블로그를 보면, 이것이 ---Begin---과 ----End----를 잘 줄바꿈처리되어야한다고 합니다. 즉, 한줄에 Begin, End가 있으면 안되고 반드시 분리가 되도록 후처리를 해야한다는 것입니다.

## 올바른 합친 인증서
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----

## 잘못된 합친 인증서
-----END CERTIFICATE----------BEGIN CERTIFICATE-----

 

 

이렇게 잘 합쳐진 파일과 개인키 파일을 nginx를 위해 마련한 ssl 경로 속에 넣습니다.

sudo mkdir /ssl/
sudo mv fullcert.crt private.key /ssl/

 

 

이제 /ssl/ 경로에 private.key, fullcert.crt 파일이 들어갑니다. 기억해두세요.

 

그리고 nginx의 설정 파일인 default.conf 파일을 수정합니다.

 

cd /etc/nginx/conf.d/
ls
# default.conf

sudo vi /etc/nginx/conf.d/default.conf

 

아래와 같이 conf 파일을 수정합니다.

## default.conf

server {
    listen       80;
    server_name  도메인을 포함한 서버주소;
    return 301 https://$host$request_uri;

}

server {
    listen       443 ssl;
    server_name  도메인을 포함한 서버주소;

    ssl_certificate     /ssl/합친 인증서.crt;
    ssl_certificate_key /ssl/개인키.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;



    root   /ncloud/data/www;
    index  index.html index.htm;


    location / {
        try_files $uri $uri/ = 404;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }


}

 

대략 아래와 같이 작성됩니다.

 

이 파일을 저장해주시고, nginx를 다시 시작합니다.

sudo systemctl restart nginx
sudo systemctl status nginx

 

 

잘 작동하는 것으로 보이네요. 이제 주소를 웹사이트에서 입력하여 확인합니다.

 

그 전에, 잠깐 수정을 해보겠습니다. 위에 적은 인덱스 html 파일을 본인이 원하는대로 좀 수정해봅니다.

sudo vi /ncloud/data/www/index.html

 

 

저는 아래와 같이 입력하고 저장했습니다.

<!DOCTYPE html>
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
<link rel="icon" href="/favicon.ico" type="image/x-icon">
<html>
<head>
<meta charset="UTF-8">
<title>nginx 테스트해보기!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>안녕하세요 NGINX!</h1>
<p>나는 그래프공부하는 학생입니다. If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
~

 

다시 nginx를 재시작합니다. 상태도 확인해주고, 이상이 없다면 주소창에 입력합니다.

 

 

 

또한 보안 여부도 확인할 수 있습니다. 인증서가 유효하다고 잘 나타나네요. 뿌듯합니다.

 

이렇게 초간단 nginx 유료인증서 등록하는 과정을 작성해보았습니다. 인증서가 비싸긴 하지만, 고객사가 요청하면 가볍게 끝낼 수 있는 능력을 키워보고 싶습니다.

 

힘내자구요!