SSL 라이브러리의 활용
SSL 라이브러리의 가장 중요한 기능은 암호화 채널을 통한 통신이다. 이를 위해서 각각의 통신은 인증서를 필요한 경우가 있으며, 실제 전자상거래나 증권 거래 등에서 이용하는 인증서인 경우 공인 인증기관에서 발급받는다.
하지만 제한적인 범위 내에서는 자체적으로 인증서를 생성하여 이용할 수 있으며, 이러한 기능은 openssl 라이브러리에서 기본적인 명령으로 제공한다.
1) 인증서 만들기
인 증서(Certificate)는 서버와 클라이언트 간에 통신을 수행하는 과정에서 서로의 신원을 보증하는 일종의 보증서 역할을 한다. 은증서는 공인된 인증기관에서 개인의 신원 확인을 거쳐서 발급하며 주식거래, 전자상거래 같은 금융 거래에서 주로 이용한다. 인증서를 발급하는 기관을 CA(Certificate Authority)라고 하며, 이러한 기관에서 발급한 인증서는 기본적으로 다음과 같은 정보를 포함한다.
– 소유자 이름 : 주민등록증의 이름과 동일한 기능
– 일련 번호 : 주민등록증에 비교할 때 주민등록번호의 역할
– 소유자의 공개 키 : 해당 인증서를 소유한 사람의 공개 키
– 인증 기관의 전자 서명 : 인증서를 발급한 기관의 전자 서명
하 지만 개발자 입장에서 제한된 시스템과 응용 프로그램을 대상으로 하는 경우에는 자체적인 인증서를 발급하고 이를 이용하여 응용 프로그램에서 이용할 수도 있는데, 이러한 기능을 수행하는 시스템을 ‘self-signed’ 서버라고 한다. 이를 위해 openssl은 기본적인 명령어로 인증서를 발급하는 기능을 갖추고 있다.
* 비밀 키 생성
인증서를 만들 때 가장 먼저 하는 작업으로 비밀 키를 생성한다. 비밀 키는 자신만이 알 수 있게 주의해서 관리해야 하는 정보다. 따라서 가능하면 누구도 알 수 없게 비밀스럽게 생성하고 관리해야 한다. 이 과정에서 가장 먼저 하는 작업은 DSA Parameter를 만드는 과정으로 다음과 같은 명령으로 수행한다.
# openssl dsaparam 1024 -out dsaparam1024.pem
이 명령은 1024 비트 크기로 DSA Parameter를 만드는 기능을 수행하며, DSA 키를 만드는 데 사용한다.
다음 명령은 각각 암호화된 DSA 또는 암호화 되지 않은 DSA 키를 생성하는 기능을 한다. 처음의 것이 암호화되지 않은 키를 생성하는 명령이고, 두번째 명령이 암호화 된 DSA 키를 생성하는 명령이다.
# openssl gendsa -out dsa1024.pem -des dsaparam1024.pem
# openssl gendsa -out dsa1024.pem dsaparam1024.pem
RSA 키를 생성하려면 다음과 같은 형식으로 명령을 이용하면 된다. DSA 키의 생성과 마찬가지로 암호 알고리즘 지정 여부에 따라 암호화 된 키 또는 암호화되지 않은 키를 생성할 수 있다.
# openssl genrsa -out rsa1024.key -des3 1024
# openssl genrsa -out rsa1024.key 1024
DH 파라미터는 다음과 같은 명령으로 생성한다.
# openssl gendh -out dh1024.pem 1024
* CSR 생성
CSR(Certificate Signing Request)은 인증서를 만들기 위해서 CA(Certificate Autority)로 보내는 문서를 말한다. 실제로 이러한 서비스는 사설 인증 업체에서 수행하는 경우가 많기 때문에 개인적으로 CSR을 생성하고 이를 이용해서 인증서를 신청하는 작업이 조금 어려울 수도 있다. openssl에서 제공하는 다음 명령을 이용해서 CSR을 생성할 수 있다.
# openssl req -new -config /etc/ssl/openssl.cnf -days 365 -key rsa1024.key > server.scr
이 명령은 RSA 1024비트 키로 CSR을 만들며, 명령 수행 과정에서 openssl.cnf 파일을 필요로 한다. 실제로 이 명령을 수행할 때는 라이브러리와 함께 설치된 openssl.cnf 파일을 적절히 수정해서 사용하자. 이 명령은 앞 단계에서 만든 RSA 키를 이용하는 명령이며, DSA를 이용해서 생성할 수도 있다. 이 경우 위의 명령에서 rsa1024.key를 DSA 키 파일인 dsa1024.key로 대치하여 수행하면 된다.
* CRT 생성
이 과정은 앞에서 생성한 CSR을 이용해서 인증서를 만드는 과정이다. 실제로 이 과정은 CSR을 받은 공인 인증 기관을 통해서 수행하지만, 한정된 범위에서 암호화 통신 기능을 위해서 사용하는 정도라면 자신이 가지고 있는 키로 서명해서 이용할 수도 있다. 이러한 경우를 self-signing이라고 한다. 이 과정은 다음 명령을 통해서 수행한다.
# openssl x509 -req -days 365 -in server.csr -signkey rsa1024.key -out server.crt
만일 가상적으로 CA 서버를 만들고 싶다면, 이 과정을 응용해서 CA 서버를 구축하고 운영할 수도 있다.