본문 바로가기
Engineering WIKI/Linux

Apache openssl 설정

by wonos 2021. 7. 4.

OpenSSL 설치 및 인증서 생성

1. OpenSSL 설치

먼저 우분투 패키지를 업데이트하고, OpenSSL이 설치되어있는지 확인해 보자.

[mgt@localserver: ~$] sudo apt-get update

[mgt@localserver: ~$] sudo openssl version

OpenSSL 1.0.2g  1 Mar 2016

OpenSSL이 설치되어 있다면 위와 같이 버전이 나타날 것이다. 설치되어 있지 않다면 아래 명령어를 입력하여 OpenSSL을 설치한다.

[mgt@localserver: ~$] sudo apt-get install openssl

2. 개인키 생성

[mgt@localserver: ~$] sudo openssl genrsa -des3 -out server.key 2048
Generating RSA private key, 2048 bit long modulus
....................+++
...............................................................................................+++
e is 65537 (0x10001)
Enter pass phrase for server.key:
139937575311000:error:28069065:lib(40):UI_set_result:result too small:ui_lib.c:823:You must type 
in 4 to 1023 characters
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:

개인키 생성 명령어를 입력하고 임의의 개인키 암호를 입력하면 된다. 그러면 서버 개인키인 server.key 파일이 생성된다.

3. CSR(Certificate Sinning Request -인증요청서) 생성

[mgt@localserver: ~$] sudo openssl req -new -days 365 -key server.key -out server.csr
Enter pass phrase for server.key:

위에서 만든 개인키의 암호를 입력한다.

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:KR
State or Province Name (full name) [Some-State]:Seoul
Locality Name (eg, city) []:Yeongdeungpo
Organization Name (eg, company) [Internet Widgits Pty Ltd]:myspring
Organizational Unit Name (eg, section) []:myspring
Common Name (e.g. server FQDN or YOUR name) []:myspring.local
Email Address []:web@myspring.local

그러면 각종 정보를 입력하는 부분이 나온다. 여기에는 자신의 경우에 맞게 적절히 입력하면 된다.

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

다음으로 추가로 정보를 입력하는 부분이 나오는데 엔터키를 두 번 눌러 넘어가면 된다.

4. 개인키 패스워드 제거

  • 개인키에 패스워드가 있으면 아파치 구동 시마다 물어본다. 편의를 위해 개인키 패스워드를 제거한다.
  • 패스워드를 제거하더라도 SSL에는 문제가 없다.
    # 기존 개인키 복사
    [mgt@localserver: ~$] sudo cp server.key server.key.origin
     
    # 개인키 패스워드 제거
    [mgt@localserver: ~$] sudo openssl rsa -in server.key.origin -out server.key
    Enter pass phrase for server.key.origin:​

6. 인증서 생성

개인키와 인증 요청서를 가지고 인증서를 생성한다.

[mgt@localserver: ~$] sudo openssl x509 -req -days 365 -in server.csr -signkey server.key -
out server.crt
Signature ok
subject=/C=KR/ST=Seoul/L=Yeongdeungpo/O=myspring/OU=myspring/CN=myspring.local/email
Address=web@myspring.local
Getting Private key

7. 생성된 인증서 확인하기

[mgt@localserver: ~$] ls -l server*
-rw-r--r-- 1 root root 1070 Nov  9 15:55 server.csr
-rw-r--r-- 1 root root 1675 Nov  9 16:00 server.key
-rw-r--r-- 1 root root 1743 Nov  9 15:59 server.key.origin
# 개인키 확인
[mgt@localserver: ~$] cat server.key | head -3
 
# 인증서 확인
[mgt@localserver: ~$] cat server.crt | head -3

아파치에 SSL 적용

1. SSL 디렉토리 생성 및 인증서 복사

관리의 편의를 위해 ssl 인증서를 모아둘 디렉토리를 생성한다.

[mgt@localserver: ~$] sudo mkdir /etc/apache2/ssl

생성한 디렉토리로 인증서를 복사한다.

[mgt@localserver: ~$] sudo cp server.crt /etc/apache2/ssl/server.crt
[mgt@localserver: ~$] sudo cp server.csr /etc/apache2/ssl/server.csr
[mgt@localserver: ~$] sudo cp server.key /etc/apache2/ssl/server.key

2. SSL 모듈 활성

  • Apache의 SSL 모듈을 활성화한다. 이때 아파치를 재시작 하라는 메시지가 나오는데, 일단 무시한다.
    [mgt@localserver: ~$] sudo a2enmod ssl​

3. /etc/apache2/ports.conf 파일 수정

아래 내용을 ports.conf 파일에 추가한다.

[mgt@localserver: ~$] sudo nano /etc/apache2/ports.conf
 
# 내용추가
<IfModule mod_ssl.c>
    Listen 443
</IfModule>

4. default-ssl.conf 파일을 복사

default-ssl.conf 파일을 복사해서 board-ssl.conf로 이름을 변경하였다. 복사한 파일명은 본인이 알기 쉽게 정하면 된다. (ex, 도메인명으로)

sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/board-ssl.conf

5. 복사한 파일 수정

위에서 복사한 파일을 수정한다.

[mgt@localserver: ~$] sudo nano /etc/apache2/sites-available/board-ssl.conf
 
# 해당 부분 수정
SSLCertificateFile /etc/apache2/ssl/server.crt 
SSLCertificateKeyFile /etc/apache2/ssl/server.key

6. board-ssl 활성화

[mgt@localserver: ~$] sudo a2ensite board-ssl

 

7. 방화벽 설정

방화벽에 OpenSSL의 포트인 443 포트로 접속을 허용하도록 변경한다.

[mgt@localserver: ~$] sudo ufw allow 443/tcp
Rule added
Rule added (v6)

방화벽 설정을 하고 443포트를 확인해보자.

[mgt@localserver: a~$] netstat -anp | grep LISTEN | grep 443

8. 아파치 재시작

[mgt@localserver: ~$] sudo /etc/init.d/apache2 restart
[ ok ] Restarting apache2 (via systemctl): apache2.service.

9. SSL 적용확인

아파치를 재시작했으면 브라우저에 https://아이피 주소 또는 https://127.0.0.1( = https://localhost 와 동일하다.)을 입력한다.