taroさんと hanako さんの間でS/MIMEを使って安全にメールのやりとりをしたい。 ただし taro さんと hanako さん、さらに作成CAの運用者は同一人物でこの3者間で秘匿鍵のやりとりの問題はないものとします。
メールクライアントとしてはOutlook Express を使っています。
認証局 | 住所 | 国 | |
都道府県 | |||
名前(CommonName) | |||
メールアドレス | |||
鍵のパスフレーズ | |||
taro | 住所 | 国 | |
都道府県 | |||
名前(CommonName) | |||
メールアドレス | |||
秘密鍵のパスフレーズ(証明書要求) | |||
証明書+秘密鍵のエクスポート用パスフレーズ | |||
hanako | 住所 | 国 | |
都道府県 | |||
名前(CommonName) | |||
メールアドレス | |||
秘密鍵のパスフレーズ(証明書要求) | |||
証明書+秘密鍵のエクスポート用パスフレーズ |
T O CAを作成(-newca) | ◎-+ (メールアドレスの分だけ処理) | O 鍵の作成+証明書要求(-newreq) ~ | O 証明書を作成して署名(-sign) | O pkcs12ファイルにまとめる | ~
認証局 | 住所 | 国 | JP |
都道府県 | Tokyo | ||
名前(CommonName) | myCA | ||
メールアドレス | CAADMIN@example.net | ||
鍵のパスフレーズ | 1234 | ||
taro | 住所 | 国 | JP |
都道府県 | Tokyo | ||
名前(CommonName) | SUZUKI Taro | ||
メールアドレス | taro@gqg.jp | ||
秘密鍵のパスフレーズ(証明書要求) | 1234 | ||
証明書+秘密鍵のエクスポート用パスフレーズ | 1234 | ||
hanako | 住所 | 国 | JP |
都道府県 | Tokyo | ||
名前(CommonName) | SUZUKI Hanako | ||
メールアドレス | hanako@gqg.jp | ||
秘密鍵のパスフレーズ(証明書要求) | 1234 | ||
証明書+秘密鍵のエクスポート用パスフレーズ | 1234 |
Shining Light Productions - Win32 OpenSSLから"Win32 OpenSSL v0.9.8d"をダウン ロードしてインストールします。
opensslの設定ファイルの修正など
> mkdir c:\temp\myCA > cd c:\temp\myCA > copy c:\openssl\bin\openssl.cnf . > PATH c:\openssl\bin;%PATH%; > set HOME=c:\temp\myCA > set SSLEAY_CONFIG=-config c:/temp/myCA/openssl.cnf
コピーした openssl.cnf を修正します。以下に修正内容をdiff形式で示します。
--- openssl.cnf.orig Fri Sep 16 08:20:24 2005 +++ openssl.cnf Sun Oct 29 16:30:58 2006 @@ -65,7 +65,7 @@ # crlnumber must also be commented out to leave a V1 CRL. # crl_extensions = crl_ext -default_days = 365 # how long to certify for +default_days = 3650 # how long to certify for default_crl_days= 30 # how long before next CRL default_md = sha1 # which md to use. preserve = no # keep passed DN ordering @@ -73,7 +73,7 @@ # A few difference way of specifying how similar the request should look # For type CA, the listed attributes must be the same, and the optional # and supplied fields are just that :-) -policy = policy_match +policy = policy_anything # For the CA policy [ policy_match ] @@ -122,17 +122,17 @@ [ req_distinguished_name ] countryName = Country Name (2 letter code) -countryName_default = AU +countryName_default = JP countryName_min = 2 countryName_max = 2 stateOrProvinceName = State or Province Name (full name) -stateOrProvinceName_default = Some-State +stateOrProvinceName_default = Tokyo localityName = Locality Name (eg, city) 0.organizationName = Organization Name (eg, company) -0.organizationName_default = Internet Widgits Pty Ltd +0.organizationName_default = # we can do this but it is not needed normally :-) #1.organizationName = Second Organization Name (eg, company) @@ -175,7 +175,7 @@ # nsCertType = objsign # For normal client use this is typical -# nsCertType = client, email +nsCertType = client, email # and for everything including object signing: # nsCertType = client, email, objsign
C:\temp\myCA>CA.pl -newca CA certificate filename (or enter to create) ←空(単にエンター) Making CA certificate ... Loading 'screen' into random state - done Generating a 1024 bit RSA private key ...........................................................++++++ .......++++++ writing new private key to './demoCA/private/cakey.pem' Enter PEM pass phrase: 認証局の鍵のパスフレーズを入力します。 Verifying - Enter PEM pass phrase: もう一度 ----- 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) [JP]: JPを変えるならここで入力 State or Province Name (full name) [Tokyo]: Tokyoを変えるならここで入力 Locality Name (eg, city) []:空欄のままでよければエンター。(以下同様) Organization Name (eg, company) []: Organizational Unit Name (eg, section) []: Common Name (eg, YOUR name) []:myCA←認証局の名前 Email Address []:CAADMIN@example.net←認証局のメールアドレス Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:←エンター An optional company name []:←エンター Using configuration from c:/temp/myCA/openssl.cnf Loading 'screen' into random state - done Enter pass phrase for ./demoCA/private/cakey.pem:認証局の鍵のパスフレーズを入力します。 Check that the request matches the signature Signature ok Certificate Details: Serial Number: cd:a2:93:02:cb:30:33:0c Validity Not Before: Oct 27 23:56:07 2006 GMT Not After : Oct 26 23:56:07 2009 GMT Subject: countryName = JP stateOrProvinceName = Tokyo commonName = myCA emailAddress = CAADMIN@example.net X509v3 extensions: X509v3 Subject Key Identifier: E8:12:98:54:DE:BB:8F:7E:60:90:3F:33:0F:C9:A0:DF:96:54:CC:2B X509v3 Authority Key Identifier: keyid:E8:12:98:54:DE:BB:8F:7E:60:90:3F:33:0F:C9:A0:DF:96:54:CC: B DirName:/C=JP/ST=Tokyo/CN=myCA/emailAddress=CAADMIN@example.net serial:CD:A2:93:02:CB:30:33:0C X509v3 Basic Constraints: CA:TRUE Certificate is to be certified until Oct 26 23:56:07 2009 GMT (1095 days) Write out database with 1 new entries Data Base Updated # CAに証明書を発行してもらうようお願いするユーザ側の作業を行います。 C:\temp\myCA>CA.pl -newreq Loading 'screen' into random state - done Generating a 1024 bit RSA private key ..........................++++++ ...........................++++++ writing new private key to 'newkey.pem' Enter PEM pass phrase:taroの鍵のパスフレーズを入力します。 Verifying - Enter PEM pass phrase:もう一度 ----- 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) [JP]: State or Province Name (full name) [Tokyo]: Locality Name (eg, city) []: Organization Name (eg, company) []: Organizational Unit Name (eg, section) []: Common Name (eg, YOUR name) []:SUZUKI Taro Email Address []:taro@example.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:←エンター An optional company name []:←エンター Request is in newreq.pem, private key is in newkey.pem C:\temp\myCA>dir ドライブ C のボリューム ラベルは OEM_PRELOAD です ボリューム シリアル番号は 0000-0000 です C:\temp\myCA のディレクトリ 2006-10-28 09:13 <DIR> . 2006-10-28 09:13 <DIR> .. 2006-10-28 09:11 1,024 .rnd 2006-10-28 09:05 <DIR> demoCA 2006-10-28 09:13 951 newkey.pem ←秘匿すべき鍵 2006-10-28 09:13 623 newreq.pem ←証明書要求 2006-10-28 09:04 9,660 openssl.cnf # 同じ場所で作業。こんどはCA側。 C:\temp\myCA>CA.pl -sign Using configuration from c:/temp/myCA/openssl.cnf Loading 'screen' into random state - done Enter pass phrase for ./demoCA/private/cakey.pem:認証局の鍵のパスフレーズを入力します。 Check that the request matches the signature Signature ok Certificate Details: Serial Number: ac:b6:2a:fb:c2:92:1d:7f Validity Not Before: Oct 28 00:16:55 2006 GMT Not After : Oct 25 00:16:55 2016 GMT Subject: countryName = JP stateOrProvinceName = Tokyo commonName = SUZUKI Taro emailAddress = taro@example.com X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Cert Type: SSL Client, S/MIME Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: AA:D7:51:CB:6E:CC:9A:57:65:B9:78:21:DB:04:3A:91:97:84:60:D7 X509v3 Authority Key Identifier: keyid:07:36:C2:08:BD:76:D6:62:9E:C3:55:46:55:E8:9F:26:5A:93:4C:5 0 Certificate is to be certified until Oct 25 00:16:55 2016 GMT (3650 days) Sign the certificate? [y/n]:y"y"を入力 1 out of 1 certificate requests certified, commit? [y/n]y"y"を入力 Write out database with 1 new entries Data Base Updated Signed certificate is in newcert.pem C:\temp\myCA>dir /od ドライブ C のボリューム ラベルは OEM_PRELOAD です ボリューム シリアル番号は 0000-0000 です C:\temp\myCA のディレクトリ 2006-10-28 09:04 9,660 openssl.cnf 2006-10-28 09:13 623 newreq.pem 2006-10-28 09:13 951 newkey.pem taroの鍵 2006-10-28 09:16 <DIR> . 2006-10-28 09:16 <DIR> .. 2006-10-28 09:17 <DIR> demoCA 2006-10-28 09:17 3,174 newcert.pem taro証明書 2006-10-28 09:17 1,024 .rnd この段階でCAの証明書、taroの秘匿鍵、CAに署名してもらったtaroの証明書が できたのでこれを一つのファイルにまとめます。 -name と -caname のオプションはあとで使う時の表示の問題だけ(だと思うけど) Common Name と同じがいいと思う。 C:\temp\myCA>openssl pkcs12 -export -in newcert.pem -inkey newkey.pem -certfile demoCA\cacert.pem -name "SUZUKI Taro" -caname "myCA" -out taro.p12 Loading 'screen' into random state - done Enter pass phrase for newkey.pem:taroの鍵のパスフレーズを入力します。 Enter Export Password:証明書+秘密鍵のエクスポート用パスフレーズ Verifying - Enter Export Password:確認のため再入力 C:\temp\myCA>dir /od ドライブ C のボリューム ラベルは OEM_PRELOAD です ボリューム シリアル番号は 0000-0000 です C:\temp\myCA のディレクトリ 2006-10-28 09:04 9,660 openssl.cnf 2006-10-28 09:13 623 newreq.pem 2006-10-28 09:13 951 newkey.pem 2006-10-28 09:17 <DIR> demoCA 2006-10-28 09:17 3,174 newcert.pem 2006-10-28 09:22 <DIR> . 2006-10-28 09:22 <DIR> .. 2006-10-28 09:22 2,572 taro.p12←このファイルを後で使う。 2006-10-28 09:22 1,024 .rnd 同様にhanakoの分も作成