オレオレ SSL 証明書(自己署名証明書)を作るワンライナーです。
$ openssl req -x509 -sha256 -nodes -days 3650 -newkey rsa:2048 -subj /CN=localhost -keyout server.key -out server.crt上記のコマンドで server.key(秘密鍵) および server.crt(自己署名証明書) が作成されます。有効期限は 10 年(3650 日)。Common Name が決まっている場合は CN=localhost のところを FQDN に置き換えてもいいでしょう。
オレオレ証明書を作るだけならこれで終わりですが、せっかくなので秘密鍵(Private Key)と証明書署名要求(CSR)、証明書(CRT)を 1 つずつ順番に作る方法も紹介します。
目次
- 秘密鍵を作成
- 証明書署名要求を作成
- 自己署名証明書を作成
秘密鍵を作成
秘密鍵(Private Key)を作成
$ openssl genrsa 2048 > server.keyファイルの中身を確認
$ openssl rsa -text < server.key Private-Key: (2048 bit) ...証明書署名要求を作成
証明書署名要求(CSR)を作成
$ openssl req -new -key server.key > server.csrコマンドを実行するといろいろ入力を求められますが、全部デフォルト Enter 連打で OK。オレオレ証明書なので、ちゃんとした値を入れてもブラウザから警告が出ます。FQDN が決まっていたら Common Name で FQDN を入力してもいいです。
Country Name (2 letter code) [AU]: State or Province Name (full name) [Some-State]: Locality Name (eg, city) []: Organization Name (eg, company) [Internet Widgits Pty Ltd]: Organizational Unit Name (eg, section) []: Common Name (e.g. server FQDN or YOUR name) []: Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:ファイルの中身を確認
Subject に入力した値が表示されます
$ openssl req -text < server.csr Certificate Request: Data: Version: 0 (0x0) Subject: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit)自己署名証明書を作成
自己署名証明書(CRT)を作成。これまでに作成した秘密鍵と証明書署名要求に対して、自分で署名を行います。有効期限は 10 年 (3650 日)。
$ openssl x509 -days 3650 -req -sha256 -signkey server.key < server.csr > server.crtファイルの中身を確認
$ openssl x509 -text < server.crt Certificate: Data: Version: 1 (0x0) Serial Number: ed:3d:bf:00:21:4c:ed:17 Signature Algorithm: sha1WithRSAEncryption Issuer: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd Validity Not Before: Feb 11 14:22:25 2017 GMT Not After : Feb 11 14:22:25 2027 GMT Subject: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit)Issuer は認証局の値。Subject は 先ほどの CSR で入力した値。自己署名なので Issuer と Subject に同じ値が入っています。
Validity は有効期限です。
北海道で在宅勤務のエンジニアRと申します。 昨日まで東京に出張しておりましたが、そこでサーバー証明書の有効期限を延長する方法がわからず少しハマったので残しておきます。 ハマった理由としては以下です。 ・サーバー証明書のデフォルトテンプレート(Webサーバーとか)は有効期限を延長できない ・テンプレートを指定したサーバー証明書の作成方法がわからない 色々ググって継ぎはぎでなんとか手順化できました。
環境としては以下です。 サーバーOS:Windows Server 2012 R2 CAの種類:エンタープライズCA(AD環境あり) 作成したい証明書:Webサーバーのサーバー証明書(IIS用) ■ CAの「ValidityPeriodUnits」レジストリ値を変更する ・[ファイル名を指定して実行]で[regedit]と入力し、[OK]をクリックする。
・[レジストリエディター]が表示されるので、以下階層まで選択する。 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration\<CAName>
・[ValidityPeriodUnits]を右クリックし、[修正]をクリックする。
・[値のデータ]に[10]を入力し、[OK]をクリックする。
・コマンドプロンプトで以下コマンドを実行し、証明機関サービスの再起動を実施する。
net stop certsvc net start certsvc
・コマンドプロンプトで以下コマンドを実行し、証明書の有効期限が10に変更されていることを確認する。 (エンタープライズCAの場合、デフォルトは2年です。)
certutil -getreg CA\ValidityPeriodUnits
■ 有効期限を変更した証明書テンプレートを複製する
・[証明機関]を開き、[証明書テンプレート]を右クリックし、[管理]をクリックする。
・[Webサーバー]を右クリックし、[テンプレートの複製]をクリックする。
・[全般]タブで以下を変更する。
テンプレート表示名:Webサーバー v2 (※他のテンプレートと重複しなければOK) テンプレート名:WebServerv2 (※他のテンプレートと重複しなければOK)
有効期限:10年
・[セキュリティ]タブで[Authenticated Users]を選択し、[登録]の[許可]にチェックを入れ、[OK]をクリックする。
・[証明機関]を開き、[証明書テンプレート]を右クリックし、[新規作成] - [発行する証明書テンプレート]をクリックする。
・[証明書テンプレートの選択]が表示されるので、複製した証明書テンプレート[Webサーバー v2]を選択し、[OK]をクリックする。
■ 証明書の要求(作成)を行う
・[ファイル名を指定して実行]で[mmc]と入力し、[OK]をクリックする。
・[ファイル] - [スナップインの追加]をクリックする。
・[証明書]を選択し、[追加]をクリックする。
・[証明書スナップイン]が表示されるので、[コンピューターアカウント]を選択し、[次へ]をクリックする
・[コンピューターの選択]が表示されるので、[ローカルコンピューター]を選択し、[完了]をクリックする。
・[スナップインの追加と削除]に戻るので、[OK]をクリックする。
・左ペインより[証明書] - [個人] - [証明書]を右クリックし、[すべてのタスク] - [新しい証明書の要求]をクリックする。
・[開始する前に]が表示されるので、[次へ]をクリックする。
・[証明書の登録ポリシーの選択]が表示されるので、[Active Directory 登録ポリシー]を選択し、[次へ]をクリックする。
・[証明書の要求]が表示されるので、[Webサーバー v2]にチェックを入れ、[この証明書を登録するには...]のリンクをクリックする。
・[証明書のプロパティ]が表示されるので、[サブジェクト]タブを選択する。
・[種類]に[共通名]を選択し、[値]に共通名を入力し、[追加]をクリックする。
(ここでいう共通名はURLに入力する値となります。ccf01というサーバ名、challenge-cf.localというドメインの場合、URLにccf01と入力する場合は共通名もccf01、URLにccf01.challenge-cf.localと入力する場合は共通名もccf01.challenge-cf.localを入力します。)
・[全般]タブを選択し、[フレンドリ名]に証明書の名前を入力し、[OK]をクリックする。
・[証明書の要求]に戻るので、[登録]をクリックする。
・[証明書インストールの結果]が表示されるので、[完了]をクリックする。
・左ペインより[証明書] - [個人] - [証明書]に作成した証明書が表示されるので、[有効期限]が10年になっていることを確認する。
(ルート証明書の有効期限が10年未満の場合、ルート証明書の有効期限と同じになります。)
■ 作成した証明書をIISにバインドする
・[インターネットインフォメーションサービス(IIS)マネージャー]を開き、[<サーバー名>] - [サイト] - [Default Web Site]を選択し、右ペインより[バインド]をクリックする。
・[サイトバインド]が表示されるので、[種類]が[https]、[ポート]が[443]、[IPアドレス]が[*]を選択し、[編集]をクリックする。
・[サイトバインドの編集]が表示されるので、[SSL証明書]で先ほど作成した[ccf01]を選択し、[OK]をクリックする。
以上が今回の手順です。
テンプレートの概念ってWindowsだけなんだろうか?などなど不明なこともあるので証明書もっと勉強せねば。。。
#Windows #CA