** 참고 : 아래의 모든 과정을 그래픽 UI로 처리할 수 있는 아주 훌륭한 툴이 있다. 이 툴에서는 각 인증서의 신뢰관계를 그래프로 아주 보기좋게 표시해 준다.
XCA – X Certificate and key management이며 리눅스, 맥, 윈도우에서 사용 가능하다.
거의 대부분의 자료 출처 : http://datacenteroverlords.com/2012/03/01/creating-your-own-ssl-certificate-authority/
주옥같은 한국식 공인인증서 말고… SSL/TLS를 위한 국제표준식 인증서를 생성하기 위한 작업이다.
OpenSSL을 사용하므로 리눅스나 맥에서 작업해야 하겠다. 윈도우에서는… 시그윈 깔면 될지도 모른다. (안해봄)
물론 생성한 인증서는 국제표준이므로 윈도우에서도 사용 가능하다.
다음 내용에 따라 생성한 CA는 어디까지나 사설 인증서이므로 아무도 신뢰해주지 않는다.
수동으로 신뢰목록에 추가해줘야 하고, 키가 유출되지 않도록 매우 신중하게 관리해야 한다.
가능하다면 접근제어가 가능한 폐쇠형 네트워크에서만 사용하는게 좋겠다. 예를들면 테스트용 서버라던지…
1. CA 생성
CA : Certificate Authority는 인증서 신뢰성을 보장해주는 인증기관을 나타낸다. 형태자체는 똑같은 인증서다.
공인인증기관의 최상위인증서(RootCA)는 시스템이나 브라우저 차원에서 신뢰하는 인증서 목록으로 보유하고 있다.
이런 인증기관은 Web of Trust의 제3자 감시를 받으므로 신뢰성을 인정받는 것이다. 국내에서는 최근에 KISA가 Web of Trust 인증을 받았다.
사설인증에 사용할 CA인증서를 하나 만들어야 한다. 이 인증서는 RootCA로 작동할 것이며, Intermediate CA는 안 만들거다.
인증서 생성은 우선 RSA 열쇠쌍을 만드는 것부터 시작한다. RSA 2048비트 키를 생성한다.
openssl genrsa -aes256 -out rootCA.key 2048
이 키는 RootCA의 개인키가 저장되므로 절대 외부로 유출되면 안된다.
접근제어를 위해 AES256으로 암호화하여 저장하며, 키 접근용 암호를 두 차례 입력한다. rootCA.key 파일이 생성된다.
rootCA.key 파일은 퍼미션 400으로 바꿔주자. 이 파일은 (유출되어 Revoke되지 않는 이상) 바뀔 일이 없다.
이제 Self-signed CA를 만들어야 한다.
openssl req -x509 -new -nodes -key rootCA.key -days 3650 -out rootCA.pem
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) []:Seoul Organization Name (eg, company) [Internet Widgits Pty Ltd]:TEST Certificate Authority Organizational Unit Name (eg, section) []:TEST Certificate Authority Common Name (eg, YOUR name) []:TEST Certificate Authority Email Address []:[email protected]
days 옵션에는 RootCA의 유효기간을 일 단위로 입력한다. 너무 짧으면 불편하고 너무 길면 보안문제가 생길 수 있다. 적당히 1년에서 10년 사이로 입력하자.
RSA키를 만들때 암호화 해 두었다면 암호부터 입력해야 한다. 이후 인증서 정보를 입력해야 한다. 주어진대로 차분히 입력하자.
이렇게 만들어진 PEM파일에 루트 인증서 정보가 저장된다. 이 파일에는 공개키 정보만 저장되어 있으므로 배포해도 무방하다.
물론 이걸 받는 사람이 신뢰할지 여부는 전적으로 상대방에게 달려있다.
2. 사설인증서 생성
사설 RootCA를 생성했으니 이제 개별 서버에서 사용할 인증서를 만들어줘야 한다. 이 절차는 인증서를 필요로 하는 서비스마다 한 번씩 수행해야 한다.
우선 각 서버에서 사용할 개인key를 생성한다.
openssl genrsa -out device.key 2048
이 키는 각 인증서에 할당되는 고유 개인키이다. 역시나 유출되면 안 되므로 필요하면 암호화하여 저장하자.
다만 암호화한 경우 서버를 재시작 할 때마다 암호를 입력해야 한다. 서버 관리자가 알아서 판단할 부분이다.
키를 생성했으면 이제 CSR 파일을 생성해야 한다. Certificate Signing Request = 말그대로 서명요청 파일이다.
openssl req -new -key device.key -out device.csr
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) []:Seoul Organization Name (eg, company) [Internet Widgits Pty Ltd]:TEST Server Organizational Unit Name (eg, section) []:TEST Server Common Name (eg, YOUR name) []:your-service.address Email Address []:[email protected]
입력요령은 RootCA때와 같으나 서버 정보를 입력한다.
이 때 가장 중요한 것이 Common Name이다. 서버의 도메인 주소를 정확하게 입력해야 한다. IP로 접속한다면 IP주소를 입력한다.
이 주소가 틀리면 정확하게 Signing되더라도 인증서 오류를 낸다. 따라서 서버 주소가 바뀐다면 인증서도 새로 발급받아야 한다.
잘못 입력하면 어떻게 되는지는 https://www.rootca.or.kr 에서 무슨 일이 벌어지는지 참고할 것.
이 파일을 Device key로 서명하면 Self-signed 인증서가 되는거고, RootCA key로 서명하면 CA-signed key가 되는 것이다.
이제 RootCA key로 서명한다.
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 365
이제 개별 서버용 인증서가 발급되었다. crt 파일과 개인 키를 서버에 올려서 사용하면 된다.