セキュリティ - 電子証明書の作成 (OpenSSL)
セキュリティ - 電子証明書の作成 (OpenSSL)
OpenSSL の Windows 版を使用して、認証局、鍵、電子証明書を作成する方法を示します。
${OPENSSL_HOME}\bin\openssl.cnf を以下のように編集します。
作業用のディレクトリを作成します。以降、 ${SSL_WORK} と表記します。
以下のスクリプトを実行します。
対話的なスクリプトなので、いくつかの質問に答えます。
ENTER を入力します。
CA 用のパスワードを入力します。
もう一度、同じパスワードを入力します。
国コードを入力します。日本の場合 'JP' です。
都道府県を入力します。 (例: 'Kanagawa')
市町村を入力します。 (例: 'Zama')
組織名を入力します。 (例: 'Uguu Oreore CA')
組織内の部署名を入力します。 (例: 'uguu')
組織の FQDN を入力します。 (例: 'www.uguu.mydns.jp')
メールアドレスを入力します。 (例: 'uguuxp@hotmail.com')
以上で、 CA 用の秘密鍵、及び証明書が作成されます。以下のようなディレクトリ構成になるので、一応、確認します。
次のコマンドを実行し、ルート証明書を作成します。
demoCA ディレクトリに ca.der ファイルが作成されます。
次のコマンドを実行します。
server.key ファイルが作成されます。
次のコマンドを実行します。
対話式のコマンドなので、いくつかの質問に答えます。
国コードを入力します。日本の場合は 'JP' です。
都道府県を入力します。 (例: 'Kanagawa')
市町村を入力します。 (例: 'Zama')
組織名を入力します。 (例: 'Uguu Software')
この組織名はサーバを運営している組織の名前であり、認証局とは別です。なので、認証局の証明書を作成したときに入力した組織名とは別の名前を入力します。同じ名前を入力した場合、うまく動作しないようです。
組織内の部署名を入力します。 (例: 'uguu')
組織の FQSN を入力します。 (例: www.uguu.mydns.jp)
メールアドレスを入力します。
ENTER を入力します。
ENTER を入力します。
以上で、 server.csr が作成されます。
まず、シリアルナンバーファイルを作成します。
次に証明書を作成します。
CA 用のパスワードを入力します。
以上で、 server.crt ファイルが作成されます。
概要
OpenSSL の Windows 版を使用して、認証局、鍵、電子証明書を作成する方法を示します。
前処理
- OpenSSL をインストールします。
- OpenSSL は、ソースコードをダウンロードしてビルドすることが基本ですが、各所でビルド済みの Windows 版バイナリが公開されています。感謝しつつダウンロードして使用しましょう。例えばここです。
- PATH を通しておくと便利です。
- 環境変数 OPENSSL_CONF に ${OPENSSL_HOME}\bin\openssl.cnf を設定します。
- Perl をインストールします。
- メモ/Perl/導入 - Windows へインストール? を参照してインストールします。
認証局 (CA) の作成
openssl.cnf を編集
${OPENSSL_HOME}\bin\openssl.cnf を以下のように編集します。
- 'unique_subject' を yes に設定し、コメントアウトを外します。
#unique_subject = no # Set to 'no' to allow creation of # several ctificates with same subject. unique_subject = yes
- 'crlnumber' のコメントアウトを外します。
#crlnumber = $dir/crlnumber # the current crl number must be # commented out to leave a V1 CRL crlnumber = $dir/crlnumber
- 'nsCertType = server' となっているコメントを外します。 'nsCertType' はいくつか記述されていますので注意。
# This is OK for an SSL server. # nsCertType = server nsCertType = server
- 'nsCertType = sslCA, emailCA' となっているコメントを外します。 'nsCertType' はいくつか記述されていますので注意。
# Some might want this also # nsCertType = sslCA, emailCA nsCertType = sslCA, emailCA
作業用ディレクトリ作成
作業用のディレクトリを作成します。以降、 ${SSL_WORK} と表記します。
CA 用秘密鍵と証明書の作成
以下のスクリプトを実行します。
CA.pl -newca
対話的なスクリプトなので、いくつかの質問に答えます。
CA certificate filename (or enter to create)
ENTER を入力します。
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:
CA 用のパスワードを入力します。
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) [AU]:
国コードを入力します。日本の場合 'JP' です。
State or Province Name (full name) [Some-State]:
都道府県を入力します。 (例: 'Kanagawa')
Locality Name (eg, city) []:
市町村を入力します。 (例: 'Zama')
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
組織名を入力します。 (例: 'Uguu Oreore CA')
Organizational Unit Name (eg, section) []:
組織内の部署名を入力します。 (例: 'uguu')
Common Name (eg, YOUR name) []:
組織の FQDN を入力します。 (例: 'www.uguu.mydns.jp')
Email Address []:
メールアドレスを入力します。 (例: 'uguuxp@hotmail.com')
以上で、 CA 用の秘密鍵、及び証明書が作成されます。以下のようなディレクトリ構成になるので、一応、確認します。
${SSL_WORK} | .rnd | \---demoCA | cacert.pem | index.txt | serial | +---certs +---crl +---newcerts \---private cakey.pem
ルート証明書の作成
次のコマンドを実行し、ルート証明書を作成します。
openssl x509 -inform pem -in ./demoCA/cacert.pem -outform der -out ./demoCA/ca.der
demoCA ディレクトリに ca.der ファイルが作成されます。
鍵、及びサーバ証明書の作成
秘密鍵の作成
次のコマンドを実行します。
openssl genrsa -out server.key 1024
Loading 'screen' into random state - done Generating RSA private key, 1024 bit long modulus .++++++ ....++++++ e is 65537 (0x10001)
server.key ファイルが作成されます。
公開鍵の作成
次のコマンドを実行します。
openssl req -new -key server.key -out server.csr
対話式のコマンドなので、いくつかの質問に答えます。
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) [AU]:
国コードを入力します。日本の場合は 'JP' です。
State or Province Name (full name) [Some-State]:
都道府県を入力します。 (例: 'Kanagawa')
Locality Name (eg, city) []:
市町村を入力します。 (例: 'Zama')
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
組織名を入力します。 (例: 'Uguu Software')
この組織名はサーバを運営している組織の名前であり、認証局とは別です。なので、認証局の証明書を作成したときに入力した組織名とは別の名前を入力します。同じ名前を入力した場合、うまく動作しないようです。
Organizational Unit Name (eg, section) []:
組織内の部署名を入力します。 (例: 'uguu')
Common Name (eg, YOUR name) []:www.uguu.mydns.jp
組織の FQSN を入力します。 (例: www.uguu.mydns.jp)
Email Address []:uguuxp@hotmail.com
メールアドレスを入力します。
Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:
ENTER を入力します。
An optional company name []:
ENTER を入力します。
以上で、 server.csr が作成されます。
サーバ用証明書の作成
まず、シリアルナンバーファイルを作成します。
echo 01 > ./demoCA/ca-cert.srl
次に証明書を作成します。
openssl x509 -CA ./demoCA/cacert.pem -CAkey ./demoCA/private/cakey.pem -CAserial ./demoCA/ca-cert.srl -req -days 365 -in server.csr -out server.crt
Loading 'screen' into random state - done Signature ok subject=/C=JP/ST=Kanagawa/L=Zama/O=Uguu Software/OU=Administrator/CN=www.uguu.mydns.jp/emailAddress=uguuxp@hotmail.com Getting CA Private Key Enter pass phrase for ./demoCA/private/cakey.pem:
CA 用のパスワードを入力します。
以上で、 server.crt ファイルが作成されます。
[TODO] クライアント証明書の作成 (未調査)
参照
2005年11月04日(金) 18:31:42 Modified by uguuxp