Openssl 사설인증기관(CA) 만들기 - Part 1 보안 관련/Openssl2010. 4. 27. 17:25
Openssl 을 이용하여 CA(Certificate Authority : 인증기관)을 만드는 방법
Openssl 이 인스톨 되어 있으면, 다음과 같이 버전을 확인 할 수 있습니다.
root@ubtdesk:/usr/local/openssl# openssl version OpenSSL 1.0.0 29 Mar 2010 |
그리고 다음과 같이 openssl 환경 설정 파일을 변경 합니다.
root@ubtdesk:/usr/local/openssl# vi openssl.cnf #################################################################### dir = /usr/local/openssl/CA # Where everything is kept certificate = $dir/ca.crt # The CA certificate x509_extensions = usr_cert # The extentions to add to the cert # Comment out the following two lines for the "traditional" # Extension copying option: use with caution. # Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs default_days = 365 # how long to certify for # A few difference way of specifying how similar the request should look # For the CA policy |
옵션 설명을 하자면,
dir 은 CA 의 관리 파일들이 저장될 디렉토리를 나타냅니다. (기본 값으로 demoCA 로 되어 있음)
certs 는 발급된 인증서들을 넣어 놓는 디렉토리이며,
crl 은 발급된 인증서 폐기 목록을 넣는 디렉토리 입니다.
database 는 인증서의 발급과 관련된 내용을 저장하는 txt 형태의 파일입니다.
newcerts 는 openssl ca 명령으로 사용자들의 인증서를 발급할때 인증서가 저장되는 디렉토리 입니다.
certificate 는 CA 자신의 인증서 파일의 위치 이며,
serial 은 현재까지 발급된 인증들의 시리얼 넘버 입니다. (1씩 증가함)
crlnumber 는 현재까지 발급된 CRL 시리얼 넘버 입니다.
private_key 는 CA 자신의 개인키 파일의 위치입니다.
default_days 는 인증서 발급시 기본 유효기간이며 (365 일 = 1년)
[ policy_name ] 은 인증서를 발급할 때 어떤 정책을 가져갈지에 대한 부분으로
countryName = match 라고 설정하면 countryName 이 다른 인증서는 발급을 하지 않습니다.
마찬가지로 stateOrProvinceName 과 organizationName 도 match 로 설정하여 이 3부분은 CA와 동일하게 설정해야만
인증서 발급이 가능합니다.
값이 optional 이면 있어도, 없어도 되는 항목이며,
supplied 는 반드시 있어야 하는 값입니다.
환경설정을 마졌으면, 다음과 같이 디렉토리 및 파일들을 만듭니다.
root@ubtdesk:/usr/local/openssl# mkdir CA root@ubtdesk:/usr/local/openssl# cd CA root@ubtdesk:/usr/local/openssl/CA# mkdir certs root@ubtdesk:/usr/local/openssl/CA# mkdir newcerts root@ubtdesk:/usr/local/openssl/CA# mkdir crl root@ubtdesk:/usr/local/openssl/CA# mkdir private root@ubtdesk:/usr/local/openssl/CA# touch serial root@ubtdesk:/usr/local/openssl/CA# echo "00" > serial root@ubtdesk:/usr/local/openssl/CA# touch index.txt root@ubtdesk:/usr/local/openssl/CA# ls -l 합계 16 drwxr-xr-x 2 root root 4096 2010-04-27 16:17 certs drwxr-xr-x 2 root root 4096 2010-04-27 16:18 crl -rw-r--r-- 1 root root 0 2010-04-27 16:18 index.txt drwxr-xr-x 2 root root 4096 2010-04-27 16:18 newcerts drwxr-xr-x 2 root root 4096 2010-04-27 16:18 private -rw-r--r-- 1 root root 0 2010-04-27 16:18 serial root@ubtdesk:/usr/local/openssl/CA# |
자~! 이제 CA 구성을 위한 환경설정을 모두 마쳤습니다.
그럼 이제 CA 생성을 위하여 CA 자신의 개인키/공개키 쌍을 만들고 CA 자신의 인증서를 발급해야 합니다.
1) CA 개인키/공개키 쌍 생성 및 키값 확인
root@ubtdesk:/usr/local/openssl/CA# openssl genrsa -des3 -out private/ca.key 1024 Generating RSA private key, 1024 bit long modulus ...............++++++ .........................++++++ e is 65537 (0x10001) Enter pass phrase for private/ca.key: CA키 비밀번호입력 Verifying - Enter pass phrase for private/ca.key: CA키 비밀번호확인 root@ubtdesk:/usr/local/openssl/CA# ls -l private/ca.key -rw-r--r-- 1 root root 963 2010-04-27 16:23 private/ca.key root@ubtdesk:/usr/local/openssl/CA# openssl rsa -in private/ca.key -text Enter pass phrase for private/ca.key: CA키 비밀번호입력 Private-Key: (1024 bit) modulus: 00:b1:1e:34:bc:ff:12:88:a5:f0:4a:07:dd:3e:0b: 68:c3:3d:d5:6f:41:dd:26:42:93:b8:07:df:ae:5f: d7:35:ed:f9:2d:87:ea:75:d5:5b:26:33:23:89:29: 9f:34:4e:e8:91:7e:4f:c3:c0:01:50:12:9f:80:6e: e6:71:d5:93:c6:bb:0c:a4:23:d8:d4:1f:a2:77:5d: f3:75:1d:b5:69:98:be:a2:66:52:50:60:9d:b7:61: 9c:44:88:52:c7:a8:0e:f1:92:c6:07:f6:d7:15:8d: 7b:80:0a:c8:a9:ba:95:b0:fe:23:ec:fc:c2:e8:e7: 39:0a:e0:0e:6e:07:28:a7:83 publicExponent: 65537 (0x10001) privateExponent: 57:1e:b0:7a:36:4c:fb:82:03:cb:a6:4a:a0:f6:23: b5:c5:78:72:9d:47:16:46:b1:3a:58:45:22:14:6a: 5b:50:8e:bc:62:9a:65:13:69:1e:45:11:39:aa:8b: 70:c3:4f:8a:21:43:42:d9:f2:cb:5c:1d:b0:a2:dc: 1f:2a:1a:e1:58:2d:07:8c:a8:71:57:e5:35:3b:a9: 7f:e1:f7:73:df:28:4a:97:be:30:e5:b1:0b:33:e2: b4:14:f5:bf:e4:a2:c2:b0:42:e4:ab:97:bd:1f:81: 62:f4:7d:d6:70:63:61:9a:1b:aa:cc:8f:e1:6a:69: cc:fc:a6:b4:2e:4f:36:a1 prime1: 00:d5:b7:8e:3d:31:24:bd:dc:9b:5a:0e:46:09:21: 5b:04:76:16:f8:e7:ad:51:5f:18:c5:79:5d:f3:7d: e5:f6:54:7d:39:9b:64:a7:87:c7:2d:fc:f9:00:c0: fd:8f:7b:f8:fe:29:c6:50:c8:e4:2c:6a:31:b5:dc: 45:e7:ce:40:b5 prime2: 00:d4:28:f7:13:28:ab:78:d8:a7:e1:78:a4:df:37: 9a:a5:36:95:46:46:63:1d:b6:e0:a4:ba:cd:ff:53: d7:ab:4a:63:ee:e5:cb:50:9b:e3:3b:b4:c3:89:b8: ce:85:6d:80:3d:3e:3f:e4:56:ea:e2:ce:a9:97:91: 5a:1d:1a:42:57 exponent1: 12:7e:42:b1:aa:d9:fa:0f:e7:e5:80:0c:b1:67:90: 7f:af:54:47:8f:8c:a0:d8:f0:c4:cd:be:c2:7e:27: 73:0c:56:95:b0:8b:a2:2f:8e:9d:bd:21:32:de:80: 52:75:30:d3:95:7b:d2:ab:bf:8a:d4:59:9e:da:03: b6:8e:53:6d exponent2: 79:e7:c3:f8:5d:41:11:e2:23:ac:b9:9e:ba:a7:ff: 92:f8:e7:13:07:34:c2:89:27:51:60:09:27:b1:ec: 55:7f:1c:26:d4:21:5c:03:06:b1:72:ef:7c:3e:15: 64:b3:83:a1:2d:18:97:42:9e:1a:8e:b7:01:e1:42: 0f:40:dc:67 coefficient: 00:ac:03:7c:97:2b:78:9c:a2:0e:d7:dc:de:0a:3a: 31:12:ef:46:ac:84:0d:fc:9d:ba:1d:ab:2d:c5:26: 68:76:00:f8:25:af:ab:aa:d5:c2:79:7a:f5:32:af: ee:8c:af:6d:ad:9a:81:ac:83:0a:27:b3:55:76:73: f0:64:61:50:2b writing RSA key -----BEGIN RSA PRIVATE KEY----- MIICXAIBAAKBgQCxHjS8/xKIpfBKB90+C2jDPdVvQd0mQpO4B9+uX9c17fkth+p1 1VsmMyOJKZ80TuiRfk/DwAFQEp+AbuZx1ZPGuwykI9jUH6J3XfN1HbVpmL6iZlJQ YJ23YZxEiFLHqA7xksYH9tcVjXuACsipupWw/iPs/MLo5zkK4A5uByingwIDAQAB AoGAVx6wejZM+4IDy6ZKoPYjtcV4cp1HFkaxOlhFIhRqW1COvGKaZRNpHkUROaqL cMNPiiFDQtnyy1wdsKLcHyoa4VgtB4yocVflNTupf+H3c98oSpe+MOWxCzPitBT1 v+SiwrBC5KuXvR+BYvR91nBjYZobqsyP4WppzPymtC5PNqECQQDVt449MSS93Jta DkYJIVsEdhb4561RXxjFeV3zfeX2VH05m2Snh8ct/PkAwP2Pe/j+KcZQyOQsajG1 3EXnzkC1AkEA1Cj3EyireNin4Xik3zeapTaVRkZjHbbgpLrN/1PXq0pj7uXLUJvj O7TDibjOhW2APT4/5Fbq4s6pl5FaHRpCVwJAEn5CsarZ+g/n5YAMsWeQf69UR4+M oNjwxM2+wn4ncwxWlbCLoi+Onb0hMt6AUnUw05V70qu/itRZntoDto5TbQJAeefD +F1BEeIjrLmeuqf/kvjnEwc0woknUWAJJ7HsVX8cJtQhXAMGsXLvfD4VZLODoS0Y l0KeGo63AeFCD0DcZwJBAKwDfJcreJyiDtfc3go6MRLvRqyEDfyduh2rLcUmaHYA +CWvq6rVwnl69TKv7oyvba2agayDCiezVXZz8GRhUCs= -----END RSA PRIVATE KEY----- |
옵션 설명을 하자면,
openssl genrsa 는 rsa용 키 생성과 관련된 커맨드이고,
-des3는 생성되는 키 값을 des3 알고리즘을 이용하여 암호화 한다는 이야기며, (생략하면 키 파일에 암호가 제거 됩니다)
-out 은 생성되는 키 이름을 지정하고,
1024는 생성되는 키의 사이즈를 이야기 합니다.
추후 openssl skey -in ca.key -out ca_noenc.key 와 같은 명령으로 키 파일의 암호를 제거 할 수 있습니다.
2) CA 인증서 요청 파일 생성 / CA 셀프인증서 생성
root@ubtdesk:/usr/local/openssl/CA# openssl req -new -key private/ca.key -out ca.csr Please enter the following 'extra' attributes Certificate is to be certified until Apr 27 08:12:02 2011 GMT (365 days) |
옵션 설명을 하자면,
openssl req 커맨드는 인증서 생성을 위한 인증서 생성 요청파일 (.csr 확장자) 을 만드는 커맨드로,
-new 는 신규 인증서 요청 파일 생성
-key 는 인증서 요청 파일에 들어갈 키값 파일을 지정해줍니다. (키값 중 공개키 등을 사용하겠죠?)
-out 은 생성될 인증서 요청 파일 명 입니다.
openssl ca 커맨드는 OpenSSL 에서 제공하는 데모 CA 기능을 이용하는 것으로, 인증기관 자기 자신의 인증서 생성 부터 시작합니다.
-in 인증서 요청 파일(.csr)
-out 인증기관(CA)의 개인키로 서명된 인증서 파일
-selfsign CA의 인증서를 생성할때 사용하는 옵션으로, 자기 자신의 개인키로 자기 자신의 공개키가 포함된 인증서를 생성
-keyfile 인증기관의 키가 있는 위치
위와 같은 과정을 거쳐서, 사설 인증기관을 생성 할 수 있습니다.
신규로 생성되는 인증서는 newcert 디렉토리에 시리얼번호.pem 형태로 저장되며,
발급이력은 index.txt 를 통하여 확인 할 수 있습니다.