2006-10-29 Takeshi ITOH

オレオレCAのオレオレ証明書でSMIME

CAの作成と証明書の作成

動機、状況

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

opensslの導入

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

CAの作成、証明書要求、および署名

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の分も作成



証明書のインストールとメールのやりとり

証明書のインストールとメールのやりとりへ続く

(c)Copyright Takeshi ITOH