커리어 개발 영역/01_개발 하기

SSL 인증서 만들고 conf 설정하고 사설 인증서 PC에 setting하기

BourgeoisBohemian 2019. 3. 7. 14:58




1. 개인키 , 공개키 발급

먼저 PrivateKey를 생성해줍니다.


A. 비번 있는 키

genrsa -des3 -out 키이름 2048

를 실행하면


비밀번호까지 두번 입력하면

비밀번호가 담긴 개인키를 만들수 있다 . 



B. 비번 없는 키

genrsa  -out 키이름 2048

비밀번호가 없는 private키를 새롭게 발급하였다. 


생성된 private.key를 확인해보면 아래와 같은 키가 생겨있는걸 알수 있다.



이제 아래 명령어로 해당 개인키와 쌍이되는 공개키를 뽑아내보자

rsa -in <개인키> -pubout -out public.key



개인키와, 공개키가 생성되었다! 


2. CSR( 인증요청서 ) 만들기 

SSL 인증의 정보를 암호화하여 인증기관에 보내 인증서를 발급받게하는 신청서입니다.

정보항목에는 국가코드, 도시, 회사명, 부서명, 이메일, 도메인주소 등이 들어가있습니다.


다음 명령어로 CSR을 생성합니다.

req -new -key private.key -out private.csr

req -new -key <키> -out CSR이름csr



명령어 진행후 , 추가 사항을 입력하면 됩니다. 

( 개발용이기때문에 아무 정보나 입력했습니다. )


3. CRT( 인증서 ) 만들기

CSR까지 생성했다면, CRT는 그냥 만들수 있지만, 

나는 나만의 사설 CA에서 인증까지 받은 인증서를 만들어보려고한다.

먼저 인증서의 서명을 해줄 rootCA가 필요하다. 


3-1> rootCA.key 생성하기! 

genrsa -aes256 -out rootCA.key 2048

genrsa <암호화 알고리즘> -out 키이름 2048



3-2> rootCA 사설 CSR 생성하기

rootCA.key를 사용하여 10년 짜리 rootCA.pem을 생성한다. 

req -x509 -new -nodes -key rootCA.key -days 3650 -out rootCA.pem

(임시로 국가,도시, 회사, 도메인,메일 등을 입력했습니다.)


3-3> CRT 생성

[2]에서 만들었던 csr을 나만의 커스텀 CA인 rootCA의 인증을 받아 private.crt로 생성합니다.

x509 -req -in private.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out private.crt -days 3650 



파일을 확인해보면 CRT를 확인할수 있습니다! 




* Conf 파일 내 용어 설명

[ssl.conf 내 설정 화면 예시]

<VirtualHost *:443> DocumentRoot /etc/httpd/htdocs ServerName www.domainname.com ServerAdmin someone@somewhere.com ErrorLog /etc/httpd/logs/error_log TransferLog /etc/httpd/logs/access_log SSLEngine on SSLCertificateFile /etc/httpd/conf/ssl.crt/server.crt SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server.key SSLCACertificateFile /etc/httpd/conf/ssl.crt/ca-bundle.crt <Files ~ "\.(cgi|shtml)$"> SSLOptions +StdEnvVars </Files> <Directory "/etc/httpd/cgi-bin"> SSLOptions +StdEnvVars </Directory> SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown CustomLog /etc/httpd/logs/ssl_request_log \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" </VirtualHost>

SSL에 대한 가장 중요한 지시는 SSLEngine on, SSLCertiFficateFile, SSLCertificateKeyFile과 많은 경우에 있어SSLCACertificateFile 지시이다.

SSL 엔진

"SSLEngine on" - 이 지시는 SSL을 구동하는 ModSSL의 명령이다.

SSLCertificateFile

SSLCertificateFile은 인증서 위치와 그 이름을 아파치에게 알려준다. 위 예에서 인증성 파일 이름은 "server.crt"로 ModSSL 설정시 추가되는 디폴트이다. 저자 개인적으로는 디폴트 이름 사용을 추천하지 않는데 얼마간의 낭패를 피하고 인증서 이름을 servername.crt(domainname.crt)로 하라. 또한 디폴트 /etc/httpd/conf/ssl.crt 또는 /usr/local/apache/conf/ssl.crt 가 아닌 다른 디렉토리를 사용할 수 있는데 경로 변경한 것을 꼭 기억해라.

SSLCertificateKeyFile

SSLCertificateKeyFile은 비밀키 이름가 그 위치를 아파치에게 알려주는데 여기서 정의된 디렉토리는 단지 루트에게만 읽기/쓰기 허가권이 주어져야 하며 다른 누구도 이 디렉토리에 액세스하지 못해야 한다.

SSLCACertificateFile

SSLCACertificateFile지시는 Intermediate(root) 인증서 위치를 아파치에게 말해주는데 사용하는 인증서에 따라 필요할 수도 있고 아닐 수도 있다. 이 인증서는 반드시 신뢰 고리(ring of trust)이다. 




* 사설 SSL 인증서 셋팅 하기


1. 먼저 생성한 .crt 파일을 다운받고 더블클릭 한다음 열기 버튼 클릭




2. 인증서 설치 클릭 ..





3. 로컬 컴퓨터를 선택하고 다음 클릭 ...





4. 모든 인증서를 다음 저장소에 저장 클릭 하고 찾아보기 버튼 클릭 ...




5. 신뢰할 수 있는 루트 인증 기관 선택하고 확인 버튼 클릭 ...




6. 다음 버튼 클릭 ...




7. 마침 버튼 클릭 




[참고 사이트]

https://namjackson.tistory.com/24

https://wiki.kldp.org/HOWTO/html/SSL-RedHat-HOWTO/ssl-redhat-howto-4.html

https://javafactory.tistory.com/1520 [FreeLife의 저장소]