概要
一般的な操作概要は以下の通り。
- OpenSSLで秘密鍵を生成。
- CSR(証明書発行要求)の作成
- 証明書の取得
ただしOpenSSLで証明書を自分で発行するとなると、自己認証局の設定などが必要になる。
また、必要に応じて、自己認証局のCA証明書を信頼する証明書として、取り込む必要がある。
デモ用CAの設定(CA.pl)
通常はCA.plスクリプトで簡単に設定します。
CA.pl -newca
※実行するためにはPerlスクリプト環境がインストールされている必要があります。
初期設定後、demoCAというディレクトリが作成されます。
再度初期設定させたい場合は、demoCAを削除するか、別の名前に変更して、再度実行します。
デモ用CAの証明書の指定
CA certificate filename (or enter to create) |
認証局用証明書が存在する場合はファイル名を指定します。
ENTERで新規作成します。
またこの時、鍵強度やアルゴリズムの指定などは、CA.plスクリプト内の設定値を使用します。
0.9.8j環境での初期値は以下のような感じ。
発行証明書の既定有効期限 |
365日 |
CA証明書の有効期限 |
1095日(3年) |
CAリポジトリ |
demoCA |
CA秘密鍵名 |
cakey.pem |
CA証明書 |
cacert.pem |
その他はOpenSSL実行コマンドの初期値を使用します。
デモ用CA証明書の秘密鍵の保護パスフレーズの指定
CA証明書の秘密鍵の保護パスフレーズを指定します。
ここで指定するパスフレーズは、CAが秘密鍵を使う場合に必要です。
入力フィールド
入力項目 |
内容 |
例 |
Country Name (2 letter code) |
国コード2文字 |
JP |
State or Province Name (full name) |
州などの名前 |
Tokyo |
Locality Name (eg, city) |
市などの名前 |
Shinjuku |
Organization Name (eg, company) |
登記簿上などに登録されている正式な組織名 |
Hoge Co., LTD. |
Organizational Unit Name (eg, section) |
部署名など |
Service Division |
Common Name (eg, YOUR name) |
CA認証局を識別するための一般名 |
Demo CA |
Email Address |
メールアドレス |
hoge@foo.co.jp |
CA証明書の秘密鍵の保護パスフレーズの入力
Enter pass phrase for . ... cakey.pem |
先の手順で指定した、CA証明書の秘密鍵の保護パスフレーズを入力します。
以上の操作で、デモCAが作成されます。
一般的な設定では、demoCAというサブフォルダが生成され、内部に作成したCA証明書や、秘密鍵、失効証明書などのリポジトリが作成されます。
デモCAでの証明書の発行(CA.pl)
証明書発行要求の作成
CA.pl -newreq
CUIにて、証明書の発行要求ウィザードが起動するので、適時入力。
最終的にカレントディレクトリ以下に
newkey.pem |
新しい秘密鍵 |
newreq.pem |
新しい鍵に対するCSRファイル |
が出力される。
証明書の発行
CA.pl -sign
デモCAの秘密鍵のパスフレーズを求められるので、入力。
以降、署名するかどうか?、証明書の発行情報をコミットするかどうかきかれるのでコミットする。
カレントディレクトリ以下に
が出力される。
newkey.pemとnewcert.pemを適当に保存する。
PKCS12の形式で、証明書と秘密鍵をパスワード保護にて保存する方法が最適。
CA.plで簡単に証明書の発行が行えるものの、細かい設定などは行えないので、秘密鍵の生成や、証明書の発行など個別にコマンドラインで行うことも可能。
秘密鍵の生成
openssl genrsa -aes128 -out test.private.pem 1024
秘密鍵の保護パスワード指定を求められるので入力する。
-aes128 |
鍵をAES128で暗号化して出力 |
1024 |
鍵長さを1024bitに指定 |
オプションの詳細は
openssl genrsa help
で確認できる。
秘密鍵の保護パスワードの解除
openssl rsa -in test.protected.private.pem -out test.private.pem
これやる必要があるのは、秘密鍵を生成する際に-des3とか、秘密鍵を暗号化している場合だけ。
※ちなみに※
ネット上のメモの大半が、秘密鍵生成時に-des3を指定して暗号化しておきながら、わざわざその後、RSAコマンド使ってパスフレーズを解除している。
これは、いろんなサイトでの間違った情報をコピペしているため。
公開鍵の生成
openssl rsa -in test.private.pem -pubout -out test.public.pem
CSR(証明書発行要求)の作成
openssl req -new -days 365 -key test.private.pem -out test.csr.pem
※他では -in オプションで指定する癖に、ここは鍵を指定するためか、-key オプションなので注意すること。
CSR(証明書発行要求)の作成(バッチ処理)
あるいはバッチ処理で実行する場合は、下記のようにコマンドラインで、サブジェクト情報を指定する。
openssl req -new -days 365 -key test.private.pem -out test.csr.pem -subj /C=JP/L=TOKYO/CN=test/
スペースが入る場合などは、"でくくる。
CSR(証明書発行要求)の確認
openssl req -in test.csr.pem -text
証明書の使用目的に応じて、設定するフィールドや要件が異なってくるため、別途調査が必要。
デモCAでの証明書の発行
openssl ca -in test.csr.pem -out test.certificate.pem
上記のコマンドを実行すると、デモCAの秘密鍵の保護パスフレーズ入力を聞いてくるため、入力。
内容確認の後、署名し、
データベースへコミットする。
デモCAでの証明書の失効
openssl ca -revoke test.cerficite.pem
PKCS12での証明書と秘密鍵の保存
openssl pkcs12 -export -in test.cer -inkey test.private.txt -out test.pfx
エクスポートパスワード指定が求められるので、指定します。
PKCS12から証明書の出力
openssl pkcs12 -in test.pfx -clcerts -nokeys -out test.cer
PKCS12での保護パスワードを聞かれるので、入力する。
PKCS12から秘密鍵の出力
openssl pkcs12 -in test.pfx -nocerts -out test.PWD.PRIVATE.pem
PKCS12での保護パスワードを聞かれるので、入力する。
またPKCS12からの秘密鍵のエクスポート時は、既定でDESによる暗号化が施されるため、保護パスワードを指定する。
SSL接続の確認
openssl s_client -connect hoge.foo.co.jp:443 -status
指定したホストに対して、SSL接続を行います。
接続後に、HTTPメソッドを送信することで、ブラウザの挙動をシュミレーションします。
SSL証明書の妥当性チェック
openssl verify -purpopse sslserver test.cer
証明書の情報
i |
issuer |
発行者 |
s |
subject |
発行先 |
設定
環境変数 OPENSSL_CONF
openssl.cfgへのパスを設定する。
どうも、全てのコマンドで有効なわけではなく、caコマンドなど一部のコマンドの際のみ有効な模様。
環境変数 HOME
UNIX環境における環境変数HOMEと同じで、Windows環境の場合は%USERPROFILE%を設定しておくことを推奨する。
.rndファイルなどの各種ファイルは「$HOME/.rnd」として保存するようなので、
設定ファイル
参考サイト
BASE64のエンコード・デコード
エンコード
openssl base64 -e -in 入力ファイル -out 出力ファイル
デコード
openssl base64 -d -in 入力ファイル -out 出力ファイル
ECC暗号の検証
★雑なメモ
使用できる暗号化アルゴリズムの確認
openssl ecparam -list_curves
鍵の作成
openssl ecparam -genkey -name prime256v1 -out test_ecc.key
-genkey |
鍵を生成 |
-name prime256v1 |
曲線のアルゴリズム名を指定(-list_curves)で確認した名前 |
-out test_ecc.key |
出力先のファイル名 |
実際に生成した鍵
-----BEGIN EC PARAMETERS-----
BggqhkjOPQMBBw==
-----END EC PARAMETERS-----
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIHMaIugFx7OmJaxF1kD5F/ZL7cYs5R8IDsdTDd3qHkkFoAoGCCqGSM49
AwEHoUQDQgAEST02cQrel6WIM1kiXa/L6zGmJEP0GkY3Wz5lWo6Pqc98FZwlkxQR
43BOQPd+8Gnjv+yFtE5POVfc3T3HFVGMJA==
-----END EC PRIVATE KEY-----
RSAと比較しても、非常に短い。
認証局側の処理
このあとCSRを作成し、認証局に署名してもらう段取りはRSAの場合と同じ。
最終更新:2015年11月15日 22:07