PHPki で簡単証明書運用 (3) 【署名されたサーバ証明書を作る】

PHPki

さて,先日の「PHPki で簡単証明書運用 (2) 【初期設定と Root CA 証明書作成】」の続きです.
今回はタイトルのとおり,サーバ証明書を作ります.

管理画面へアクセス

Apacheの Alias で設定した URL に /ca をつけてブラウザでアクセスしてください.多分こんな形で Forbidden になると思います.
phpki007

どのような形でも良いので HTTPS アクセスが可能な Web Server 環境であれば https://[サーバ名 or アドレス]/phpki/ca の形で SSL アクセスすると次のような認証画面が表示されます.
phpki008

ここのユーザ,パスワードは「secure.sh」実行時に指定したユーザ名とパスワードを入力してください.認証が成功するとこのようなトップ画面が表示されます.
phpki009

Web サーバの SSL 設定は,PHPki で証明書を作ってからやるんだ!! という方は .htaccess ファイルを修正して一時的に SSL(HTTPS) ではなく,通常の HTTP アクセスを可能なように設定しましょう.

PHPki のソースを展開したディレクトリ以下に ca というディレクトリがあります.この ca ディレクトリ以下に .htaccess ファイルがありますので,このファイルを修正します.修正は簡単で,一番下の行の SSLRequreSSL をコメントアウトします.

AuthName "Restricted Area"
AuthType Basic
AuthUserFile "/usr/local/www/phpkipasswd-master"
require valid-user
SSLRequireSSL

AuthName "Restricted Area"
AuthType Basic
AuthUserFile "/usr/local/www/phpkipasswd-master"
require valid-user
#SSLRequireSSL

に変更します.

修正後あらためてブラウザでアクセスしてください.HTTP でも認証画面が表示され,認証が成功すると上述の管理画面トップが表示されます.

署名されたサーバ証明書を作成する

さて,いよいよ本題です.
管理画面トップの「Create a New Certificate」をクリックしてください.クリックすると「Certificate Request Form」画面に移動します.
phpki010

ここから必要項目を入力していくのですが,アスタリスク(*) が付いている項目は必須項目です.全部についています…
じゃぁ,全て必須項目って注釈で良いじゃないか!! と思いつつ,各項目を入力して行きましょう.

  • Common Name

証明書を発行するサーバのホスト名を FQDN で入力します.たとえば,www.seichan.org 等です.

Tip として,ワイルドカード証明書を作る場合は *.seichan.org など,ホスト名部分をアスタリスク(*) にすることで作成出来ます.
利用頻度は低いと思いますが,IPアドレスを入力して設定することも可能です.アドレスが変わるということは良くある話ですので…

  • E-mail Address

証明書を発行するサーバの管理者のメールアドレスを入力します.証明書内に埋め込まれますので外部に公開する場合などでは,恥ずかしいアドレスは避けましょう.

  • Organization (Company/Agency)

組織名,通常は会社名の英文字正式名称を入力します.

  • Department/Unit

所属名や部署名を英文字で入力します.OpenSSLで証明書を作成する際の Organizational Unit Name になります.

  • Locality (City/County)

市町村名を英文字で入力します.

  • State/Province

都道府県名を英文字で入力します.

  • Country

2文字の国コードを入力します.日本の場合は「JP」です.

  • Certificate Password

この証明書のパスワードを設定します.Root CA パスワードや,管理画面アクセス用のパスワードでは無いので注意してください.

  • Certificate Life

証明書の有効期限を選択します.Root CA 証明書でも書きましたが,あまり長いのも本来は良くないことですので適切な有効年数を指定してください.

  • Key Size

鍵長を選択します.大きいサイズの方が暗号強度が高いという事になります.Root CA と同等か一段低い程度で十分かと思います.

  • Certificate Use

一番重要な箇所です.証明書を作成するにあたっての利用用途を選択します.Web サーバなどの SSL 証明書であればSSL Serverを選択してください.下に選択項目と利用用途を表としてまとめましたので,よろしければ合わせてご参照ください.

「SSL Server」を選択した場合,追加で2つの入力フォームが出現します.

  • Alternative DNS Names

「Common Name」で入力したFQDN以外でも同じ証明書を利用したい場合はここに1行 1FQDN で入力します.上でワイルドカード署名書についてふれましたが,ワイルドカードだと範囲が広すぎる場合が多い為,ここのフィールドで必要分のみ設定した方がセキュアです.

  • IP’s

「Common Name」で入力したIPアドレス以外でも同じ証明書を利用したい場合はここに1行 1IPで入力します.

入力が完了したら「Submitt Request」ボタンをクリックしてください.

続いて入力内容の確認画面へ移りますので,入力内容の確認後問題があれば「Go Back」ボタンを,問題が無い場合は「Yes! Create and Download」ボタンをクリックします.
phpki011

Yes! Create and Download」ボタンをクリックした後は内部的に証明書が作成,署名されます.その後,ブラウザのダウンロード画面が表示されますのでダウンロードしてください.
phpki012

証明書のパスワード除去

先ほどダウンロードした証明書は当然そのまま利用可能です.ですが,パスワードが埋め込まれている為,証明書を利用する (Apache などの) サービスやデーモンを起動させる際,毎回パスワード入力が必要となります.
パスワード入力を行う方が安全なことは間違いないのですが,それは知っているけど楽したい!! という方はパスワードを除去しちゃいましょう.

パスワードの除去は PHPki では出来ないため,openssl コマンドで実施します.次のようなコマンドでパスワードを除去できます.

openssl rsa -in www.seichan.org.pem -out www.seichan.org_nopwd.pem
Enter pass phrase for www.seichan.org.pem: [パスワード]

この場合パスワード有りの証明書ファイル「www.seichan.org.pem」からパスワードを除去し,「www.seichan.org_nopwd.pem」として証明書を作成しています.パスワード無しの証明書を使用するよう,ソフトウェアの設定を変更してください.

証明書とRSA秘密鍵の分離

先ほどダウンロードした証明書はRSA秘密鍵とサーバ証明書がひとつのファイルに収められています.このまま利用することが可能なソフトウェアではそのまま利用しても問題はありません.ただ,分離して管理したい場合や,ひとつのファイルに纏められていると利用できないソフトウェアの場合は分離する必要があります.
これは通常のエディタで対応することが可能です.
—–BEGIN RSA PRIVATE KEY—–」から始まりその直後の「—–END CERTIFICATE—–」までが RSA秘密鍵となり,—–BEGIN CERTIFICATE—–」から「—–END CERTIFICATE—–」までがサーバ証明書になります.

これらの区切り文字を含んだ形でそれぞれのファイルとして保存することで分離出来ます.長くなるので間を端折りますが,次のような形のファイルを作成するということです.

  • RSA秘密鍵
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,D8B9BA859B623F2E
qBlaPoF5ludJ1Fta8fhgH1BZOVMV1VDN+m+EXM2R5mepam6WSuFfJXZBaJLaokPK
kwLCkpVdpzAXBxkOZJ8IevENqa0+hSR0N0jNsP3uK6cKtkkMgvkeGYRTpN36YNPc
....
XRptZ7V5dYEw2IUD7v/4qnM1mLxRLH6HLgI4iiY73XVXgfIsgfeNkh3C+g5v/Je4
-----END RSA PRIVATE KEY-----
  • サーバ証明書
-----BEGIN CERTIFICATE-----
MIIG9jCCBd6gAwIBAgIDEAABMA0GCSqGSIb3DQEBDQUAMIG0MQswCQYDVQQGEwJK
UDEOMAwGA1UECBMFVG9reW8xEjAQBgNVBAcTCVNoaW5hZ2F3YTEcMBoGA1UEChMT
U2VpY2hhbiBIb21lIFNlcnZlcjEeMBwGA1UECxMVQ2VydGlmaWNhdGUgQXV0aG9y
...
Y0sfGwIhmoxAbNNKLN0uuRI/Us0T4Yils4yE
-----END CERTIFICATE-----

証明書種別のまとめ

付録として,各証明書種別の詳細な説明が記載されているサイトの URL をリンクしました.

証明書種別利用用途詳細説明サイト
E-mail, SSL Clientクライアント証明書クライアント証明書とは (GlobalSign)
E-mail, SSL Client, Code Signingコードサイニング証明書コードサイニング (ASCIIデジタル用語辞典)
SSL Serverサーバ証明書SSLサーバ証明書とは (GlobalSign)
VPN Client OnlyVPNクライアント用証明書OpenVPNで使用できる認証方法 (OpenVPN.JP)
VPN Server OnlyVPNサーバ用証明書OpenVPNで使用できる認証方法 (OpenVPN.JP)
VPN Client, VPN ServerVPNクライアント・サーバ証明書(兼用)OpenVPNで使用できる認証方法 (OpenVPN.JP)
Time Stampingタイムスタンプ局証明書電子文書の「タイムスタンプ」を解説する (IT Pro)

なぜ「VPN Client Only」と「VPN Server Only」および「VPN Client, VPN Server」の説明サイトが同じ場所を指しているか.ですが,単純に PHPki のコード上,これら3つの処理の違いが無いからです…
単純にわかりやすいように名前を分けたのか,何か意図があって分けているのかが不明です…

以上,サーバ証明書を作る.でした.次回はそれら証明書の管理についてふれたいと思います.

コメント

タイトルとURLをコピーしました