[Linux] jks 인증서 파일에서 pem, key 인증서 추출 후 파일 만들기

2024. 8. 14. 13:58기술 창고/Linux

728x90
SMALL

리눅스 서버에 https 를 적용하기 위해 가지고 있는 톰캣용 인증서 jks 파일에서 key 및 pem 파일들을 추출해야만 했습니다.

일반적으로 jks 파일로 인증서를 등록하기 위해서는 보통 만들고 있는 프로젝트 내부의 server.xml 파일 내부에서 설정해주어야 했으나 제가 운영 중인 프로젝트는 Spring Boot 기반의 maven 프로젝트이기 때문에 해당 server.xml 파일은 존재하지 않았습니다.

따라서 key와 pem 파일을 추출할 필요가 있었습니다.

오늘은 이 jks파일에서 필요한 key, pem 파일들을 추출하는 방법을 정리해보겠습니다.

 

 

Keytool

key, pem 파일들을 추출하기 위해서 keytool 기능을 사용할 것입니다.

이 Keytool은 키와 인증서  관리하고  저장소에 해당 키와 인증서들을 저장합니다. 

Keytool의 명령은 우리가 자체 서명 된 인증서를 생성하고 키 스토어에 대한 정보를 표시 할 수 있습니다.

또한 만들어져있는 jks 파일과 같은 인증서 파일을 통해 추출할 수 있는 기능을 가지고 있습니다.

 

 

(1)

우선 파일질라를 통해 운영하는 서버에 접속하여 원하는 경로에 jks 파일을 업로드해줍니다.

 

 

(2)

keytool -importkeystore -srckeystore {업로드한 jks 파일명}.jks -destkeystore {업로드한 jks 파일명}.p12 -deststoretype PKCS12

서버에 커맨드로 접속하여 위의 명령어를 입력하여 keytool을 통해 jks 파일에서 PKCS12 포맷 형식으로 key를 추출합니다.

# 명령어 입력 후 비밀번호 입력 란이 나오면, jks 파일의 비밀번호가 존재 시 해당 비밀번호 입력

 

 

(3)

openssl pkcs12 -in {추출한 key 파일명 (업로드한 jks 파일명과 동일)}.p12 -out {추출할 pem 파일명 (업로드한 jks 파일명과 동일)}.pem -clcerts -nokeys

이제 openssl 명령어를 통해 추출한 key 파일에서 pem 인증서(cert) 파일을 추출합니다.

# 명령어 입력 후 비밀번호 입력 란이 나오면, jks 파일의 비밀번호가 존재 시 해당 비밀번호 입력

 

 

(4)

openssl pkcs12 -in {추출한 key 파일명 (업로드한 jks 파일명과 동일)}.p12 -out {추출한 key 파일명 (업로드한 jks 파일명과 동일)}.key -nocerts -des

openssl 명령어를 통해 2번 항목에서 추출한 key 파일에서 실제 key 파일을 추출합니다.

# 명령어 입력 후 비밀번호 입력 란이 나오면, jks 파일의 비밀번호가 존재 시 해당 비밀번호 입력

 

 

(5)

파일질라에서 확인해보면 정상적으로 key와 pem 인증서 파일들이 추출된 것을 확인할 수 있습니다.

 

 

 

+

이제 위에서 추출한 인증서 파일들을 가지고 nginx의 설정에 넣어주어 https 를 적용하거나 내장 톰캣 https 설정에 값을 넣어 적용하여 사용하면 됩니다.

 

nginx 설정 예시

# HTTPS server
    server {
        listen       443 http2 ssl;
        server_name  star.test.co.kr;

        ssl_certificate      /app/nginx/conf/ssl/cert파일이름.pem;
        ssl_certificate_key  /app/nginx/conf/ssl/key파일이름.key;
        ssl_password_file    /app/nginx/conf/ssl/비밀번호파일;


        location / {
            root   html;
            index  index.html index.htm;
        }
    }

 

 

 

프로젝트 내장 톰캣 설정 예시 (Spring Boot 내장 톰캣 기준)

server.port={프로젝트 운영 포트}
server.ssl.enabled=true
server.ssl.key-password={jks 파일 비밀번호 (비밀번호가 있을 경우 사용, 없으면 제거)}
server.ssl.key-store={jks 파일명}.jks
server.ssl.key-store-type=PKCS12
server.ssl.key-store-password={jks 파일 비밀번호 (비밀번호가 있을 경우 사용, 없으면 제거)}

 

728x90
반응형
LIST

'기술 창고 > Linux' 카테고리의 다른 글

[Linux] nohup.out 서버 로그 Logrotate 로 분산 관리  (0) 2024.06.17