탐색 링크 건너뛰기 | |
인쇄 보기 종료 | |
Oracle Solaris 관리: 보안 서비스 Oracle Solaris 11 Information Library (한국어) |
이 절은 pktool 명령을 사용하여 암호, 암호문, 파일, 키 저장소, 인증서, CRL과 같은 공개 키 객체를 관리하는 방법을 설명합니다.
키 관리 프레임워크(KMF)를 통해 중앙에서 공개 키 기술을 관리할 수 있습니다.
|
이 절차는 자체 서명된 인증서를 만들고 PKCS #11 키 저장소에 인증서를 저장합니다. 이 작업의 일부로 RSA 공개/개인 키 쌍도 생성됩니다. 개인 키는 인증서와 함께 키 저장소에 저장됩니다.
% pktool gencert [keystore=keystore] label=label-name \ subject=subject-DN serial=hex-serial-number
공개 키 객체의 유형별로 키 저장소를 지정합니다. 값은 nss, pkcs11, ssl일 수 있습니다. 이 키워드는 선택 사항입니다.
발행자가 인증서에 제공하는 고유한 이름을 지정합니다.
인증서에 대한 식별 이름을 지정합니다.
16진수 형식의 일련 번호를 지정합니다. 인증서의 발행자가 0x0102030405와 같은 숫자를 선택합니다.
% pktool list Found number certificates. 1. (X.509 certificate) Label: label-name ID: Fingerprint that binds certificate to private key Subject: subject-DN Issuer: distinguished-name Serial: hex-serial-number n. ...
이 명령은 키 저장소의 모든 인증서를 나열합니다. 다음 예에서 키 저장소는 하나의 인증서만 포함합니다.
예 13-1 pktool을 사용하여 자체 서명된 인증서 만들기
다음 예에서 My Company의 사용자가 자체 서명된 인증서를 만들고 PKCS #11 객체용 키 저장소에 인증서를 저장합니다. 키 저장소는 처음에 비어 있습니다. 키 저장소가 초기화되지 않은 경우 softtoken의 PIN이 changeme입니다.
% pktool gencert keystore=pkcs11 label="My Cert" \ subject="C=US, O=My Company, OU=Security Engineering Group, CN=MyCA" \ serial=0x000000001 Enter pin for Sun Software PKCS#11 softtoken:Type PIN for token
% pktool list Found 1 certificates. 1. (X.509 certificate) Label: My Cert ID: 12:82:17:5f:80:78:eb:44:8b:98:e3:3c:11:c0:32:5e:b6:4c:ea:eb Subject: C=US, O=My Company, OU=Security Engineering Group, CN=MyCA Issuer: C=US, O=My Company, OU=Security Engineering Group, CN=MyCA Serial: 0x01
이 절차는 PEM 또는 원시 DER로 인코딩된 PKI 정보가 담긴 파일을 키 저장소로 가져오는 방법을 설명합니다. 내보내기 절차는 예 13-4를 참조하십시오.
% pktool import keystore=keystore infile=infile-name label=label-name
PKCS #12 형식의 내보내기 파일과 같은 개인 PKI 정보를 가져오는 경우 파일에 암호가 필요합니다. 가져오기 중인 파일의 작성자가 사용자에게 PKCS #12 암호를 알려줍니다.
Enter password to use for accessing the PKCS12 file:Type PKCS #12 password
Enter pin for Sun Software PKCS#11 softtoken: Type PIN for token
% pktool list Found number certificates. 1. (X.509 certificate) Label: label-name ID: Fingerprint that binds certificate to private key Subject: subject-DN Issuer: distinguished-name Serial: hex-serial-number 2. ...
예 13-2 PKCS #12 파일을 키 저장소로 가져오기
다음 예에서 사용자가 PKCS #12 파일을 타사로부터 가져옵니다. pktool import 명령은 gracedata.p12 파일에서 개인 키 및 인증서를 추출하여 사용자의 선호 키 저장소에 저장합니다.
% pktool import keystore=pkcs11 infile=gracedata.p12 label=GraceCert Enter password to use for accessing the PKCS12 file:Type PKCS #12 password Enter pin for Sun Software PKCS#11 softtoken: Type PIN for token Found 1 certificate(s) and 1 key(s) in gracedata.p12 % pktool list Found 1 certificates. 1. (X.509 certificate) Label: GraceCert ID: 12:82:17:5f:80:78:eb:44:8b:98:e3:3c:11:c0:32:5e:b6:4c:ea:eb Subject: C=US, O=My Company, OU=Security Engineering Group, CN=MyCA Issuer: C=US, O=My Company, OU=Security Engineering Group, CN=MyCA Serial: 0x01
예 13-3 X.509 인증서를 키 저장소로 가져오기
다음 예에서 사용자가 PEM 형식의 X.509 인증서를 사용자의 선호 키 저장소로 가져옵니다. 이 공개 인증서는 암호로 보호되지 않습니다. 사용자의 공개 키 저장소도 암호로 보호되지 않습니다.
% pktool import keystore=pkcs11 infile=somecert.pem label="TheirCompany Root Cert" % pktool list Found 1 certificates. 1. (X.509 certificate) Label: TheirCompany Root Cert ID: 21:ae:83:98:24:d1:1f:cb:65:5b:48:75:7d:02:47:cf:98:1f:ec:a0 Subject: C=US, O=TheirCompany, OU=Security, CN=TheirCompany Root CA Issuer: C=US, O=TheirCompany, OU=Security, CN=TheirCompany Root CA Serial: 0x01
PKCS #12 형식의 파일을 만들어서 개인 키 및 연관된 X.509 인증서를 다른 시스템으로 내보낼 수 있습니다. 파일 액세스는 암호로 보호됩니다.
% pktool list Found number certificates. 1. (X.509 certificate) Label: label-name ID: Fingerprint that binds certificate to private key Subject: subject-DN Issuer: distinguished-name Serial: hex-serial-number 2. ...
pktool list 명령에서 키 저장소 및 레이블을 사용합니다. 내보내기 파일에 대한 파일 이름을 제공합니다. 이름에 공백이 포함된 경우 이름 주위를 큰 따옴표로 둘러쌉니다.
% pktool export keystore=keystore outfile=outfile-name label=label-name
프롬프트에 키 저장소의 현재 암호를 입력합니다. 이 시점에 내보내기 파일의 암호를 만듭니다. 파일을 가져올 때 수신자가 이 암호를 제공해야 합니다.
Enter pin for Sun Software PKCS#11 softtoken: Type PIN for token Enter password to use for accessing the PKCS12 file:Create PKCS #12 password
참고 - 내보내기 파일에서 별도로 암호를 보냅니다. 최적의 사용법으로 대역 외에서(예: 전화 통화 중) 암호를 알려줄 것을 제안합니다.
예 13-4 PKCS #12 형식의 인증서 및 개인 키 내보내기
다음 예에서 사용자가 개인 키 및 연관된 X.509 인증서를 표준 PKCS #12 파일로 내보냅니다. 이 파일을 다른 키 저장소로 가져올 수 있습니다. PKCS #11 암호는 소스 키 저장소를 보호합니다. PKCS #12 암호는 PKCS #12 파일의 개인 데이터를 보호하는 데 사용됩니다. 파일을 가져오려면 이 암호가 필요합니다.
% pktool list Found 1 certificates. 1. (X.509 certificate) Label: My Cert ID: 12:82:17:5f:80:78:eb:44:8b:98:e3:3c:11:c0:32:5e:b6:4c:ea:eb Subject: C=US, O=My Company, OU=Security Engineering Group, CN=MyCA Issuer: C=US, O=My Company, OU=Security Engineering Group, CN=MyCA Serial: 0x01
% pktool export keystore=pkcs11 outfile=mydata.p12 label="My Cert" Enter pin for Sun Software PKCS#11 softtoken: Type PIN for token Enter password to use for accessing the PKCS12 file:Create PKCS #12 password
그런 다음 사용자가 수신자에게 전화를 걸어서 PKCS #12 암호를 알려줍니다.
키 저장소의 객체에 대한, 그리고 키 저장소 자체에 대한 암호문을 생성할 수 있습니다. 객체나 키 저장소에 액세스하려면 암호문이 필요합니다. 키 저장소의 객체에 대한 암호문 생성의 예는 예 13-4를 참조하십시오.
% pktool setpin keystore=nss|pkcs11 dir=directory
키 저장소에 아직 암호가 설정되지 않은 경우 Return 키를 눌러 암호를 만듭니다.
Enter current token passphrase:Press the Return key Create new passphrase:Type the passphrase that you want to use Re-enter new passphrase:Retype the passphrase Passphrase changed.
이제 키 저장소가 passphrase(으)로 보호됩니다. 암호문을 잊어버린 경우 키 저장소의 객체에 액세스할 수 없습니다.
예 13-5 키 저장소를 암호문으로 보호
다음 예는 NSS 데이터베이스에 대한 암호문을 설정하는 방법을 보여줍니다. 암호문을 만든 적이 없으므로 사용자가 첫번째 프롬프트에 Return 키를 누릅니다.
% pktool setpin keystore=nss dir=/var/nss Enter current token passphrase:Press the Return key Create new passphrase: has8n0NdaH Re-enter new passphrase: has8n0NdaH Passphrase changed.
일부 응용 프로그램은 공개/개인 키 쌍이 필요합니다. 이 절차에서 이러한 키 쌍을 만들어서 저장합니다.
다음 방법 중 하나를 사용합니다.
디스크의 파일에서 직접 키를 읽는 응용 프로그램의 경우 파일 기반 키가 생성됩니다. 일반적으로, OpenSSL 암호화 라이브러리를 직접 사용하는 응용 프로그램은 응용 프로그램의 키 및 인증서를 파일에 저장해야 합니다.
주 - file 키 저장소는 타원 곡선(ec) 키 및 인증서를 지원하지 않습니다.
% pktool genkeypair keystore=file outkey=key-filename \ [format=der|pem] [keytype=rsa|dsa] [keylen=key-size]
file 값은 키에 대해 파일 유형의 저장소 위치를 지정합니다.
키 쌍이 저장된 파일의 이름을 지정합니다.
키 쌍의 인코딩 형식을 지정합니다. der 출력은 이진이고 pem 출력은 ASCII입니다.
키의 길이를 비트 단위로 지정합니다. 숫자는 8로 나눌 수 있어야 합니다. 가능한 키 크기를 결정하려면 cryptoadm list -vm 명령을 사용합니다.
이 방법을 사용하기 전에 단계 1을 완료해야 합니다.
PKCS #11 키 저장소는 하드웨어 장치에 객체를 저장하는 데 사용됩니다. 이 장치에는 암호화 프레임워크로 플러그인할 수 있는 Sun Crypto Accelerator 6000 카드, 신뢰된 플랫폼 모듈(TPM) 장치, 스마트 카드 등이 있습니다. 또한 PKCS #11을 사용하여 softtoken(디스크의 개인 하위 디렉토리에 객체를 저장하는 소프트웨어 기반 토큰)에 객체를 저장할 수 있습니다. 자세한 내용은 pkcs11_softtoken(5) 매뉴얼 페이지를 참조하십시오.
지정한 레이블로 키 저장소에서 키 쌍을 검색할 수 있습니다.
% pktool genkeypair label=key-label \ [token=token[:manuf[:serial]]] \ [keytype=rsa|dsa|ec] [curve=ECC-Curve-Name]]\ [keylen=key-size] [listcurves]
키 쌍의 레이블을 지정합니다. 키 쌍은 자체 레이블로 키 저장소에서 검색할 수 있습니다.
토큰 이름을 지정합니다. 기본적으로 토큰 이름은 Sun Software PKCS#11 softtoken입니다.
키 쌍 유형을 지정합니다. 타원 곡선(ec) 유형의 경우 선택적으로 곡선 이름을 지정합니다. 곡선 이름은 listcurves 옵션에 출력으로 나열됩니다.
키의 길이를 비트 단위로 지정합니다. 숫자는 8로 나눌 수 있어야 합니다.
ec 키 유형에 대한 curve= 옵션에 값으로 사용할 수 있는 타원 곡선 이름을 나열합니다.
NSS 키 저장소는 주 암호화 인터페이스로 NSS를 이용하는 서버에서 사용됩니다. 예를 들어, Oracle iPlanet 웹 서버는 객체 저장소에 NSS 데이터베이스를 사용합니다.
이 방법을 사용하기 전에 단계 1을 완료해야 합니다.
% pktool keystore=nss genkeypair label=key-nickname \ [token=token[:manuf[:serial]]] \ [dir=directory-path] [prefix=database-prefix] \ [keytype=rsa|dsa|ec] [curve=ECC-Curve-Name]] \ [keylen=key-size] [listcurves]
nss 값은 키에 대해 NSS 유형의 저장소 위치를 사용합니다.
키 쌍의 레이블을 지정합니다. 키 쌍은 자체 레이블로 키 저장소에서 검색할 수 있습니다.
토큰 이름을 지정합니다. 기본적으로 토큰은 Sun Software PKCS#11 softtoken입니다.
NSS 데이터베이스에 대한 디렉토리 경로를 지정합니다. 기본적으로 directory가 현재 디렉토리입니다.
NSS 데이터베이스에 대한 접두어를 지정합니다. 기본값은 접두어 없음입니다.
키 쌍 유형을 지정합니다. 타원 곡선 유형의 경우 선택적으로 곡선 이름을 지정합니다. 곡선 이름은 listcurves 옵션에 출력으로 나열됩니다.
키의 길이를 비트 단위로 지정합니다. 숫자는 8로 나눌 수 있어야 합니다.
ec 키 유형에 대한 curve= 옵션에 값으로 사용할 수 있는 타원 곡선 이름을 나열합니다.
키를 저장한 위치에 따라 다음 명령 중 하나를 사용합니다.
% pktool list keystore=file objtype=key infile=key-filename Found n keys. Key #1 - keytype:location (keylen)
$ pktool list objtype=key Enter PIN for keystore: Found n keys. Key #1 - keytype:location (keylen)
% pktool list keystore=nss dir=directory objtype=key
예 13-6 pktool 명령을 사용하여 키 쌍 만들기
다음 예에서 사용자가 처음으로 PKCS #11 키 저장소를 만듭니다. RSA 키 쌍에 대한 키 크기를 결정한 후에 응용 프로그램에 대한 키 쌍을 생성합니다. 마지막으로, 키 쌍이 키 저장소에 있는지 확인합니다. RSA 키 쌍의 두번째 인스턴스를 하드웨어에 저장할 수 있습니다. 사용자가 token 인수를 지정하지 않았으므로 키 쌍이 Sun Software PKCS#11 softtoken으로 저장됩니다.
# pktool setpin Create new passphrase:Easily remembered, hard-to-detect password Re-enter new passphrase:Retype password Passphrase changed. % cryptoadm list -vm | grep PAIR ... CKM_DSA_KEY_PAIR_GEN 512 1024 . . . CKM_RSA_PKCS_KEY_PAIR_GEN 256 4096 . . . ... CKM_RSA_PKCS_KEY_PAIR_GEN 512 2048 X . . ecc: CKM_EC_KEY_PAIR_GEN,CKM_ECDH1_DERIVE,CKM_ECDSA,CKM_ECDSA_SHA1 % pktool genkeypair label=specialappkeypair keytype=rsa keylen=2048 Enter PIN for Sun Software PKCS#11 softtoken :Type password % pktool list Enter PIN for Sun Software PKCS#11 softtoken :Type password Found 1 keys. Key #1 - keypair: specialappkeypair (2048 bits)
예 13-7 타원 곡선 알고리즘을 사용하는 키 쌍 만들기
다음 예에서 사용자가 타원 곡선(ec) 키 쌍을 키 저장소에 추가하고, 곡선 이름을 지정하고, 키 쌍이 키 저장소에 존재하는지 확인합니다.
% pktool genkeypair listcurves secp112r1, secp112r2, secp128r1, secp128r2, secp160k1 . . . c2pnb304w1, c2tnb359v1, c2pnb368w1, c2tnb431r1, prime192v2 prime192v3 % pktool genkeypair label=eckeypair keytype=ec curves=c2tnb431r1 % pktool list Enter PIN for Sun Software PKCS#11 softtoken :Type password Found 2 keys. Key #1 - keypair: specialappkeypair (2048 bits) Key #2 - keypair: eckeypair (c2tnb431r1)
이 절차는 PKCS #10 인증서 서명 요청(CSR)을 서명하는 데 사용됩니다. CSR은 PEM 또는 DER 형식일 수 있습니다. 서명 프로세스가 X.509 v3 인증서를 발행합니다. PKCS #10 CSR을 생성하려면 pktool(1) 매뉴얼 페이지를 참조하십시오.
시작하기 전에
인증 기관(CA)으로서 CSR을 받아서 파일에 저장했습니다.
서명자의 키를 PKCS #11 키 저장소에 저장한 경우 signkey는 이 개인 키를 검색하는 label입니다.
서명자의 키를 NSS 키 저장소나 file 키 저장소에 저장한 경우 signkey는 이 개인 키를 보유하는 파일 이름입니다.
CSR의 파일 이름을 지정합니다.
서명된 인증서의 일련 번호를 지정합니다.
서명된 인증서에 대한 파일 이름을 지정합니다.
CA 발행자 이름을 식별 이름(DN) 형식으로 지정합니다.
signcsr 하위 명령의 선택적 인수에 대한 내용은 pktool(1) 매뉴얼 페이지를 참조하십시오.
예를 들어, 다음 명령은 PKCS #11 저장소에서 서명자의 키로 인증서를 서명합니다.
# pktool signcsr signkey=CASigningKey \ csr=fromExampleCoCSR \ serial=0x12345678 \ outcert=ExampleCoCert2010 \ issuer="O=Oracle Corporation, \ OU=Oracle Solaris Security Technology, L=Redwood City, ST=CA, C=US, \ CN=rootsign Oracle"
다음 명령은 파일에서 서명자의 키로 인증서를 서명합니다.
# pktool signcsr signkey=CASigningKey \ csr=fromExampleCoCSR \ serial=0x12345678 \ outcert=ExampleCoCert2010 \ issuer="O=Oracle Corporation, \ OU=Oracle Solaris Security Technology, L=Redwood City, ST=CA, C=US, \ CN=rootsign Oracle"
전자 메일, 웹 사이트 또는 기타 방식을 사용하여 인증서를 요청자에게 전달할 수 있습니다.
예를 들어, 전자 메일을 사용하여 ExampleCoCert2010 파일을 요청자에게 보낼 수 있습니다.
키 저장소 이름을 제공하여 플러그인을 식별합니다. KMF에 플러그인을 추가할 때 소프트웨어가 키 저장소 이름으로 플러그인을 식별합니다. 플러그인이 옵션을 받아들이도록 정의할 수 있습니다. 이 절차는 KMF에서 플러그인을 제거하는 방법을 포함합니다.
% /usr/bin/kmfcfg install keystore=keystore-name \ modulepath=path-to-plugin [option="option-string"]
구문 설명은 다음과 같습니다.
keystore-name – 제공한 키 저장소에 대한 고유한 이름입니다.
path-to-plugin – KMF 플러그인에 대한 공유 라이브러리 객체의 전체 경로를 지정합니다.
option-string – 공유 라이브러리 객체의 선택적 인수를 지정합니다.
% kmfcfg list plugin keystore-name:path-to-plugin [(built-in)] | [;option=option-string]
% kmfcfg uninstall keystore=keystore-name % kmfcfg plugin list
예 13-8 KMF 플러그인을 옵션과 함께 호출
다음 예에서 관리자가 KMF 플러그인을 사이트 특정 디렉토리에 저장합니다. 플러그인이 debug 옵션을 받아들이도록 정의됩니다. 관리자가 플러그인을 추가하고 플러그인이 설치되었는지 확인합니다.
# /usr/bin/kmfcfg install keystore=mykmfplug \ modulepath=/lib/security/site-modules/mykmfplug.so # kmfcfg list plugin KMF plugin information: ----------------------- pkcs11:kmf_pkcs11.so.1 (built-in) file:kmf_openssl.so.1 (built-in) nss:kmf_nss.so.1 (built-in) mykmfplug:/lib/security/site-modules/mykmfplug.so # kmfcfg modify plugin keystore=mykmfplug option="debug" # kmfcfg list plugin KMF plugin information: ----------------------- ... mykmfplug:/lib/security/site-modules/mykmfplug.so;option=debug
이제 플러그인이 디버깅 모드로 실행됩니다.