"OpenSSL"의 두 판 사이의 차이
둘러보기로 가기
검색하러 가기
잔글 |
잔글 (→HTTPS 서버 인증서) |
||
(같은 사용자의 중간 판 5개는 보이지 않습니다) | |||
19번째 줄: | 19번째 줄: | ||
*2048-bits RSA 키(private.key) 생성 | *2048-bits RSA 키(private.key) 생성 | ||
:*-des3 : 삼중 DES 암호화 적용 | :*-des3 : 삼중 DES 암호화 적용 | ||
− | ::{|cellspacing="0" cellpadding="2" border="0" width="100%" align="center" | + | ::{| cellspacing="0" cellpadding="2" border="0" width="100%" align="center" |
|- | |- | ||
− | |bgcolor="#D0FF9D"| | + | | bgcolor="#D0FF9D" | |
openssl genrsa -des3 -out private.key 2048 | openssl genrsa -des3 -out private.key 2048 | ||
: #--- 암호 입력 (암호를 반드시 기억하자) | : #--- 암호 입력 (암호를 반드시 기억하자) | ||
|} | |} | ||
:*키에서 암호 삭제 | :*키에서 암호 삭제 | ||
− | ::{|cellspacing="0" cellpadding="2" border="0" width="100%" align="center" | + | ::{| cellspacing="0" cellpadding="2" border="0" width="100%" align="center" |
|- | |- | ||
− | |bgcolor="#D0FF9D"| | + | | bgcolor="#D0FF9D" | |
openssl rsa -in private.key -out private.pem | openssl rsa -in private.key -out private.pem | ||
|} | |} | ||
127번째 줄: | 127번째 줄: | ||
== 사설인증서 CA 처리 == | == 사설인증서 CA 처리 == | ||
+ | |||
+ | === PHP - OpenLDAP === | ||
+ | <pre>vi /etc/openldap/ldap.conf | ||
+ | TLS_REQCERT allow | ||
+ | BASE dc=ldap,dc=jopenbusiness,dc=com | ||
+ | URI ldap://ldap.jopenbusiness.com | ||
+ | TLS_CACERTDIR /etc/openldap/certs</pre> | ||
+ | /etc/openldap/certs/ 폴더에 CA 인증서를 복사하여 둡니다. | ||
+ | |||
+ | |||
+ | |||
+ | Test Program | ||
+ | <pre>vi zztest.php | ||
+ | <?php | ||
+ | ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7); | ||
+ | |||
+ | $ds=ldap_connect("ldap.jopenbusiness.com", 389); | ||
+ | if ($ds) { | ||
+ | ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); | ||
+ | ldap_start_tls($ds); | ||
+ | $sr = @ldap_search($ds, "dc=ldap,dc=jopenbusiness,dc=com", "cn=demo001", array('cn')); | ||
+ | if ($sr !== FALSE) { | ||
+ | $info = @ldap_get_entries($ds, $sr); | ||
+ | $dn = $info[0]['dn']; | ||
+ | } | ||
+ | $ldapbind = @ldap_bind($ds, $dn, ""); | ||
+ | } | ||
+ | ?> | ||
+ | php -f zztest.php | ||
+ | |||
+ | openssl s_client -connect ldap.jopenbusiness.com:389 | ||
+ | openssl s_client -showcerts -connect ldap.jopenbusiness.com:389 | ||
+ | |||
+ | |||
+ | </pre> | ||
+ | |||
+ | == HTTPS 서버 인증서 == | ||
+ | |||
+ | HTTPS 서비스를 위해서는 인증서 구매가 필요 합니다. | ||
== 참고 문헌 == | == 참고 문헌 == |
2019년 8월 1일 (목) 17:31 기준 최신판
보안을 위해서 사용되는 OpenSSL을 정리 한다.
- 홈페이지 : http://www.openssl.org/
- 다운로드 :
- 라이선스 : Apache Style License, http://www.openssl.org/source/license.html
- 플랫폼 :
목차
CentOS에서 OpenSSL 설치
yum install openssl
OpenSSL 사용자 매뉴얼
예전에 CA(Certificate Authority)를 구축할 수 있는 Software를 판매한 적이 있었다. 직접 참여를 하지는 않았지만 관여를 하고 있었기 때문에 보안과 인증서에 대해서 공부를 했었다. 그 때 경험이 향후 보안과 관련된 작업을 할 때 여러모로 도움이 많이 되었다.
오픈소스 중에는 OpenSSL이라는 인증서를 만들고 관리할 수 있는 소프트웨어가 있다. 인증서를 생성할 수 있기 때문에 OpenSSL을 사용하면 사설 CA를 구축할 수도 있다. 사설 CA를 구축하는 것은 좀 큰일이고 인증서가 있으면 SSL, TLS 등 보안과 관련된 기본적인 여러가지 기능을 구현할 수 있다.
여기서는 OpenSSL을 사용하여 사설 인증서와 서버 인증서를 생성하는 방법을 알아 보자.
개인키와 사설 인증서 생성
- 2048-bits RSA 키(private.key) 생성
- -des3 : 삼중 DES 암호화 적용
openssl genrsa -des3 -out private.key 2048
- #--- 암호 입력 (암호를 반드시 기억하자)
- 키에서 암호 삭제
openssl rsa -in private.key -out private.pem
- 서명 정보가 들어 있는 CSR(private.csr) 생성
- CSR : Certificate Signing Request
openssl req -new -key private.key -out private.csr #--- 키 생성시 입력한 암호 입력 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]: 회사명 (Jopenbusiness) Organizational Unit Name (eg, section) []: 서버도메인 (www.jopenbusiness.com) Common Name (eg, YOUR name) []: 이름 (pnuskgh) Email Address []: 이메일_주소 엔터 엔터
- 인증기관에 인증서 신청시 private.csr 파일의 내용을 복사하여 인증기관에 보낸다.
-----BEGIN NEW CERTIFICATE REQUEST----- 중간 내용 포함 -----END NEW CERTIFICATE REQUEST-----
- 자신이 서명한 인증서 (private.crt) 생성
- -days 3560 : 유효기간을 3650일로 설정
openssl x509 -req -days 3560 -in private.csr -signkey private.key -out private.crt #--- 키 생성시 입력한 암호 입력
서버 인증서 생성
- Server 인증서 (server.crt) 생성
openssl genrsa -des3 -out server.key 2048 openssl req -new -key server.key -out server.csr openssl x509 -req -days 3560 -in server.csr -signkey server.key -out server.crt -CA private.crt -CAkey private.key -CAcreateserial #--- server.key의 암호 입력 #--- private.key의 암호 입력 #--- 서버 인증서 검증 openssl verify -CAfile private.crt server.crt
Client 인증서 생성
- Client 인증서 (client.crt) 생성
openssl genrsa -des3 -out client.key 2048 openssl req -new -key client.key -out client.csr openssl x509 -req -days 3560 -in client.csr -signkey client.key -out client.crt -CA server.crt -CAkey server.key -CAcreateserial #--- client.key의 암호 입력 #--- server.key의 암호 입력 #--- Client 인증서 검증 openssl verify -CAfile server.crt client.crt
용어 및 인증서 관리
- CRT, DER, PEM 파일간의 변환
- pem : base64 encoding 형태의 인증서
- der : 바이너리 형태의 인증서
openssl x509 -outform der -in cert.crt -out cert.der openssl x509 -inform der -in cert.der -out cert.pem openssl x509 -outform der -in cert.pem -out cert.der
- 용어 설명
- CA(Certificate Authority)
- 인증서를 사용할 때 Public/Private Key를 분배하는 과정의 문제점을 해결하기 위해 필요하며 Certificate을 인증 해주는 역할을 함
- 만약 Certificate에 sign을 한 CA를 믿을 수 있다면(Trusted CA) certificate도 믿을 수 있음
개인키와 공개키 생성
OpenSSL을 사용하여 /etc/mail/certs/ 폴더에 인증서를 만들어 봅시다.
- 개인키와 공개키를 저장하고 관리하기 위한 폴더 생성
cd /etc/mail mkdir certs cd /etc/mail/certs chmod 700 /etc/mail/certs
- 인증을 위한 키(dsa1024.pem)를 만든다.
openssl dsaparam 1024 -out dsa1024 -out dsa1024.pem
- OpenSSL 개인키(mycert.pem, mykey.pem)를 만든다.
openssl req -x509 -nodes -days 3650 -newkey dsa:dsa1024.pem -out /etc/mail/certs/mycert.pem -keyout /etc/mail/certs/mykey.pem 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]:Jopenbusiness Organizational Unit Name (eg, section) []:Jopenbusiness Common Name (eg, YOUR name) []:pnuskgh Email Address []:메일_주소 ln -s /etc/mail/certs/mycert.pem /etc/mail/certs/CAcert.pem chmod 600 /etc/mail/certs/*
- OpenSSL 공개키를 만든다.
openssl req -x509 -new -days 3650 -key /etc/mail/certs/mykey.pem -out /etc/mail/certs/mycert.pem Country Name (2 letter code) [GB]:KR State or Province Name (full name) [Berkshire]:Seoul Locality Name (eg, city) [Newbury]:Seoul Organization Name (eg, company) [My Company Ltd]:Jopenbusiness Organizational Unit Name (eg, section) []:Jopenbusiness Common Name (eg, your name or your server's hostname) []:pnuskgh Email Address []:메일_주소 chmod 600 /etc/mail/certs/*
사설인증서 CA 처리
PHP - OpenLDAP
vi /etc/openldap/ldap.conf TLS_REQCERT allow BASE dc=ldap,dc=jopenbusiness,dc=com URI ldap://ldap.jopenbusiness.com TLS_CACERTDIR /etc/openldap/certs
/etc/openldap/certs/ 폴더에 CA 인증서를 복사하여 둡니다.
Test Program
vi zztest.php <?php ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7); $ds=ldap_connect("ldap.jopenbusiness.com", 389); if ($ds) { ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); ldap_start_tls($ds); $sr = @ldap_search($ds, "dc=ldap,dc=jopenbusiness,dc=com", "cn=demo001", array('cn')); if ($sr !== FALSE) { $info = @ldap_get_entries($ds, $sr); $dn = $info[0]['dn']; } $ldapbind = @ldap_bind($ds, $dn, ""); } ?> php -f zztest.php openssl s_client -connect ldap.jopenbusiness.com:389 openssl s_client -showcerts -connect ldap.jopenbusiness.com:389
HTTPS 서버 인증서
HTTPS 서비스를 위해서는 인증서 구매가 필요 합니다.