このサイトでもSSL関連の記事も増えてきました。SSLを使うためには、SSL用の各証明書が必要になります。
その作成手順が、各ツールでバラバラなので、本来の openssl で提供されているシェルスクリプト CA (Debian系では、CA.sh) を使った以下の証明書の作成についてまとめてみました。
- プライベート認証局証明書
- サーバー証明書
- クライアント証明書
- 目次
- 履歴
2017年5月26日 誤字修正(謝辞:けろきん さん)
2015年12月30日 誤字修正(謝辞:Nonbe さん)
2015年2月16日 (おまけ)プライベート認証局を登録(インポート)についての解説追加
2015年1月11日 PEM形式について補足説明追加
2012年6月4日 初版
OpenSSLのインストールする
証明書を作成する上で、最低限必要なパッケージがOpenSSLです。少なくともOpenSSLがインストールされていなければ証明書作成などを含めて、SSLで必要な機能を利用することはできません。
既にインストール済の場合が多いと思いますが、確認も含めてインストール方法を記載しておきます。
|
|
OpenSSLでデフォルトで読み込まれる設定ファイルも OPENSSLDIR/openssl.cnf となります。
CentOS,ScientificLinux → /etc/pki/tls/openssl.cnf
Debian,Ubuntu → /usr/lib/ssl/openssl.cnf → /etc/ssl/openssl.cnf(実体)
ただし、/usr/lib/ssl/openssl.cnf → /etc/ssl/openssl.cnf へのリンクとなっていますので、実質、読み込まれるのは、 /etc/ssl/openssl.cnfとなります。
証明書を作成する
サーバー証明書、クライアント証明書は、この認証局の署名が必要になります。
つまり、そのサーバー証明書が正しいものですよという電子署名が必要になるわけです。
この認証局には、いわゆる公に認められているパブリック認証局(シマンテック・ノートンセキュリティ(旧日本ベリサイン) などが有名です)と
個人、法人などで勝手にSSLの技術を利用するために自前で認証局と同じ作業を行うプライベート認証局があります。
もちろん、パブリック認証局にて署名されたサーバー証明書であれば、ほとんどウェブブラウザが対応していますので、以下のような警告メッセージ(FireFoxの例)は表示されることはありません。
これが出ることで、やっぱり訪問者は、ちょっとびっくりしますし、通常なら、そのサイトを見るのはやめようと思うのが普通だと思います。これは、ショッピングサイトなどでは、致命的ですね。
そういったサイトでは、間違いなくパブリック認証局にて署名されたサーバー証明書を使うべきです。
逆に既知の人(例えば社員だけなど)だけに SSL接続させたい場合には、あえて費用をかけてパブリック認証局を利用しなくともプライベート認証局でも十分な場合があります。
既知の人であれば、サイトのSSL接続の前に、SSL接続する可能性のあるすべてにユーザに プライベート認証局の証明書を発行し、
各ユーザのウェブブラウザに認証局証明書としてインポートしてもらうことで先の警告メッセージは表示されなくなります。
その点も含めて以下にプライベート認証局からサーバー証明書、クライアント証明書までを簡単に解説してみます。
参考記事 : SSL認証会社徹底比較
前準備
- 有効期限を設定できるようにCAスクリプトを編集する。
CAスクリプトでは、デフォルトの設定でCA証明書の有効期限が3年に設定されています。そこで、自由に変更できるように、スクリプトを編集しておきます。
各ディストリビューションでファイル名、パスが異なりますので注意してください。(編集内容、箇所は同じです。)
CentOS,ScientificLinux → /etc/pki/tls/misc/CADebian,Ubuntu → /usr/lib/ssl/misc/CA.sh
63 64 65 66 67
... # 固定で3年になっているので、ここを編集します。 #CADAYS="-days 1095" # 3 years if [ -z "$CADAYS" ] ; then CADAYS="-days 1095" ; fi # 3 years ...
- デフォルトのユーザ情報を編集する。
以降、各証明書を作成する際に、いつも同じようなユーザ情報の問い合わせがあります。そこで、デフォルトのユーザ情報を設定しておくと、わざわざ入力する手間を省けます。 デフォルトのユーザ情報は、デフォルトのOpenSSLの設定ファイルへ設定します。
各ディストリビューションでファイル名、パスが異なりますので注意してください。(編集内容、箇所は同じです。)
CentOS,ScientificLinux → /etc/pki/tls/openssl.cnfDebian,Ubuntu → /usr/lib/ssl/openssl.cnf
... [ CA_default ] # CA のディレクトリをここでは、./CA とします。 #dir = ./demoCA # Where everything is kept dir = ./CA # Where everything is kept ... [ req_distinguished_name ] countryName = Country Name (2 letter code) #countryName_default = XX countryName_default = JP # デフォルト国コード countryName_min = 2 countryName_max = 2 stateOrProvinceName = State or Province Name (full name) #stateOrProvinceName_default = Default Province stateOrProvinceName_default = Tokyo # デフォルト都道府県 localityName = Locality Name (eg, city) #localityName_default = Default City localityName_default = Setagaya # デフォルト市町村区 0.organizationName = Organization Name (eg, company) #0.organizationName_default = Default Company Ltd 0.organizationName_default = example.com # デフォルト会社名 or ドメイン名 # we can do this but it is not needed normally #1.organizationName = Second Organization Name (eg, company) #1.organizationName_default = World Wide Web Pty Ltd organizationalUnitName = Organizational Unit Name (eg, section) #organizationalUnitName_default = commonName = Common Name (eg, your name or your server\'s hostname) commonName_max = 64 emailAddress = Email Address emailAddress_max = 64 emailAddress_default = webmaster@example.com # デフォルト管理者メールアドレス # SET-ex3 = SET extension number 3 ... [ tsa_config1 ] # These are used by the TSA reply generation only. # TSA のディレクトリをここでは、./CA とします。(ここでは関係ないが、変更だけしておく) #dir = ./demoCA # TSA root directory dir = ./CA # TSA root directory ...
太字 箇所が編集箇所です。
これを設定しておくと、あとの手順で毎回入力する手間が省けます。
- OpenSSLの設定ファイルを認証局用、サーバー用、クライアント用で準備する。
先に編集したデフォルトのOpenSSLの設定ファイルをコピーして、認証局用、サーバー用、クライアント用として準備しておきます。
以降、それぞれに作成する証明書用になります。
CentOS,ScientificLinux → /etc/pki/tls/openssl.cnf
$ cd /etc/pki/tls/ # 認証局(CA)用として openssl-ca.cnf をコピーしておきます。 [tls]$ cp openssl.cnf openssl-ca.cnf # サーバー用として openssl-server.cnf をコピーしておきます。 [tls]$ cp openssl.cnf openssl-server.cnf # クライアント用として openssl-client.cnf をコピーしておきます。 [tls]$ cp openssl.cnf openssl-client.cnf
Debian,Ubuntu → /usr/lib/ssl/openssl.cnf → /etc/ssl/openssl.cnf(実体)
# デフォルトの設定ファイル(openssl.cnf) のリンク先ディレクトリへ移動します。 $ cd /etc/ssl/ # 認証局(CA)用として openssl-ca.cnf をコピーしておきます。 [ssl]$ cp openssl.cnf openssl-ca.cnf # サーバー用として openssl-server.cnf をコピーしておきます。 [ssl]$ cp openssl.cnf openssl-server.cnf # クライアント用として openssl-client.cnf をコピーしておきます。 [ssl]$ cp openssl.cnf openssl-client.cnf
プライベート認証局のCA証明書を作成する。
まずは、認証局の証明書、鍵を作成します。
- 先に準備した 認証局用設定ファイル(openssl-ca.cnf)を編集します。
各ディストリビューションでファイル名、パスが異なりますので注意してください。(編集内容、箇所は同じです。)
CentOS,ScientificLinux → /etc/pki/tls/openssl-ca.cnfDebian,Ubuntu → /etc/ssl/openssl-ca.cnf
[openssl-ca.cnf]
... [ usr_cert ] ... basicConstraints=CA:TRUE # デフォルトでCA証明書として使用します ... [ v3_ca ] ... nsCertType = sslCA, emailCA # デフォルトでSSL認証局、電子メール認証局とします ...
- プライベート認証局のCA証明書を作成します。
各ディストリビューションでファイル名、パスが異なりますので最初のコマンドイメージだけ別に記載します。(以降の入力項目などはすべての同じです)
また、起動前にコマンドラインから変数を設定しています。それぞれの変数は、以下のとおりです。- CADAYS=”-days 3650″:認証局の有効期限を10年としています。
- SSLEAY_CONFIG=”-config /etc/…/openssl-ca.cnf”:使用する設定ファイルを指定しています。
- CATOP=./CA:認証局ディレクトリを論理パスで指定しています。(CentOS,ScientificLinuxでは、/etc/pki/CA がデフォルトなので設定していません)
CentOS,ScientificLinux
# 新規にCA証明書を作成します。 $ cd /etc/pki/tls/ $ CADAYS="-days 3650" SSLEAY_CONFIG="-config /etc/pki/tls/openssl-ca.cnf" /etc/pki/tls/misc/CA -newca ... CA certificate filename (or enter to create) Making CA certificate ... Generating a 2048 bit RSA private key .......................................+++ ........+++ writing new private key to '/etc/.../CA/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. ----- # デフォルト([]内表示)で良い場合は、そのままRETURNでOKです。 # JP: 日本 Country Name (2 letter code) [JP]: JP # Tokyo:東京都 State or Province Name (full name) [Tokyo]: Tokyo # Setagaya:世田谷区 Locality Name (eg, city) [Setagaya]: Setagaya # 会社名 or ドメイン名 Organization Name (eg, company) [example.com]: example.com # 部署などであるが、ここではそのままリターン Organizational Unit Name (eg, section) []: # CAの名前 : あなたの名前かサイト名 Common Name (eg, your name or your server's hostname) []: Private CA # 管理者メールアドレス Email Address [webmaster@example.com]: webmaster@example.com Please enter the following 'extra' attributes to be sent with your certificate request # そのままリターン A challenge password []: # そのままリターン An optional company name []: Using configuration from /etc/.../openssl-ca.cnf # 先に入力したパスフレーズ(パスワード)を再入力 Enter pass phrase for /etc/.../CA/private/./cakey.pem: Check that the request matches the signature Signature ok Certificate Details: Serial Number: d6:38:3b:73:e8:1d:0c:0b Validity Not Before: Feb 16 09:08:41 2015 GMT Not After : Feb 13 09:08:41 2025 GMT Subject: countryName = JP stateOrProvinceName = Tokyo organizationName = example.com commonName = Private CA emailAddress = webmaster@example.com X509v3 extensions: X509v3 Subject Key Identifier: FF:5F:89:2E:9C:87:0C:62:3E:67:5A:8E:20:BE:5E:C2:2E:5F:6E:AF X509v3 Authority Key Identifier: keyid:FF:5F:89:2E:9C:87:0C:62:3E:67:5A:8E:20:BE:5E:C2:2E:5F:6E:AF X509v3 Basic Constraints: CA:TRUE Netscape Cert Type: SSL CA, S/MIME CA Certificate is to be certified until Feb 13 09:08:41 2025 GMT (3650 days) Write out database with 1 new entries Data Base Updated # ここで作成した認証局用の各ファイルを確認しておきます。 $ ls -1 /etc/pki/CA/* /etc/pki/CA/cacert.pem # CA証明書(CAのcakey.pem で署名した公開鍵) /etc/pki/CA/careq.pem # CAのCSR (CAの自己署名する前の公開鍵) /etc/pki/CA/index.txt # CA管理ファイル(証明書管理情報) /etc/pki/CA/index.txt.attr # CA管理ファイル(属性) /etc/pki/CA/index.txt.old # CA管理ファイル(一つ前) /etc/pki/CA/serial /etc/pki/CA/certs: # 証明書ディレクトリ /etc/pki/CA/newcerts: # 新しい証明書ディレクトリ C0DBFD1232845AA7.pem # 新規に作成した証明書が、随時、作成されていきます。(ファイル名は、作成した時、環境によって異なる) # このファイルは、./CA/cacert.pem と同じです。管理用なので特に意識する必要はありません、 /etc/pki/CA/private: # 秘密鍵ディレクトリ cakey.pem # CA秘密鍵
Debian,Ubuntu
# 新規にCA証明書を作成します。 $ cd /etc/ssl/ $ CADAYS="-days 3650" SSLEAY_CONFIG="-config /etc/ssl/openssl-ca.cnf" CATOP=./CA /usr/lib/ssl/misc/CA.sh -newca ... CA certificate filename (or enter to create) Making CA certificate ... Generating a 2048 bit RSA private key .......................................+++ ........+++ writing new private key to '/etc/.../CA/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. ----- # デフォルト([]内表示)で良い場合は、そのままRETURNでOKです。 # JP: 日本 Country Name (2 letter code) [JP]: JP # Tokyo:東京都 State or Province Name (full name) [Tokyo]: Tokyo # Setagaya:世田谷区 Locality Name (eg, city) [Setagaya]: Setagaya # 会社名 or ドメイン名 Organization Name (eg, company) [example.com]: example.com # 部署などであるが、ここではそのままリターン Organizational Unit Name (eg, section) []: # CAの名前 : あなたの名前かサイト名 Common Name (eg, your name or your server's hostname) []: Private CA # 管理者メールアドレス Email Address [webmaster@example.com]: webmaster@example.com Please enter the following 'extra' attributes to be sent with your certificate request # そのままリターン A challenge password []: # そのままリターン An optional company name []: Using configuration from /etc/.../openssl-ca.cnf # 先に入力したパスフレーズ(パスワード)を再入力 Enter pass phrase for /etc/.../CA/private/./cakey.pem: Check that the request matches the signature Signature ok Certificate Details: Serial Number: d6:38:3b:73:e8:1d:0c:0b Validity Not Before: Feb 16 09:08:41 2015 GMT Not After : Feb 13 09:08:41 2025 GMT Subject: countryName = JP stateOrProvinceName = Tokyo organizationName = example.com commonName = Private CA emailAddress = webmaster@example.com X509v3 extensions: X509v3 Subject Key Identifier: FF:5F:89:2E:9C:87:0C:62:3E:67:5A:8E:20:BE:5E:C2:2E:5F:6E:AF X509v3 Authority Key Identifier: keyid:FF:5F:89:2E:9C:87:0C:62:3E:67:5A:8E:20:BE:5E:C2:2E:5F:6E:AF X509v3 Basic Constraints: CA:TRUE Netscape Cert Type: SSL CA, S/MIME CA Certificate is to be certified until Feb 13 09:08:41 2025 GMT (3650 days) Write out database with 1 new entries Data Base Updated # ここで作成した認証局用の各ファイルを確認しておきます。 $ ls -1 /etc/ssl/CA/* /etc/ssl/CA/cacert.pem # CA証明書(CAのcakey.pem で署名した公開鍵) /etc/ssl/CA/careq.pem # CAのCSR (CAの自己署名する前の公開鍵) /etc/ssl/CA/index.txt # CA管理ファイル(証明書管理情報) /etc/ssl/CA/index.txt.attr # CA管理ファイル(属性) /etc/ssl/CA/index.txt.old # CA管理ファイル(一つ前) /etc/ssl/CA/serial /etc/ssl/CA/certs: # 証明書ディレクトリ /etc/ssl/CA/newcerts: # 新しい証明書ディレクトリ C0DBFD1232845AA7.pem # 新規に作成した証明書が、随時、作成されていきます。(ファイル名は、作成した時、環境によって異なる) # このファイルは、./CA/cacert.pem と同じです。管理用なので特に意識する必要はありません、 /etc/ssl/CA/private: # 秘密鍵ディレクトリ cakey.pem # CA秘密鍵
以降の各サーバー証明書、クライアント証明書作成において、上記のCA証明書、CA秘密鍵ファイルが、デフォルトそのまま使用されますので、 ここで、正しく作成されていることを確認しておきましょう。
- 必要に応じてPEM形式の証明書を作成します。
必要に応じて作成したCA証明書をPEM形式の証明書を作成します。
また、ファイル名は capem.pem としておきます。
(ウェブブラウザやメールクライアントソフトに認証局登録する際は、先に作成したCA証明書あるいは、ここで作成するPEM形式のCA証明書を使用します。)CentOS,ScientificLinux
$ openssl x509 -in /etc/pki/CA/cacert.pem -outform PEM -out /etc/pki/CA/capem.pem
Debian,Ubuntu
$ openssl x509 -in /etc/ssl/CA/cacert.pem -outform PEM -out /etc/ssl/CA/capem.pem
PEM とは、
Privacy Enhanced Mail の略で、直訳すると “プライバシー強化メール” という感じでしょうか。
単純に、PEMは、暗号化されたメールと思えば、概ね間違いではないと思います。
ただ、ここで使っている PEM形式と言っているのは、そのメールの暗号化のための証明書の形式を言っているにすぎません。
openssl のパラメータの簡単な解説を以下に記載しておきます。
x509 : X.509形式の証明書を作成
-outform PEM : PEM形式で出力
メール(SendMailやPostfix,Dovecot など) では、サーバー証明書として、ここで作成したPEM形式のものを使うことになります。
その認証局にて、サーバーやクライアント証明書を発行(作成)していくことになります。 ここの手順を、再度、実行した場合(CA証明書を再発行した場合)は、既に発行(作成)したサーバーやクライアント証明書も再発行となるので、注意しましょう。
サーバー用の証明書を作成する。
先に認証局の証明書、鍵が作成できたら、サーバー用の証明書を作成します。
サーバー用証明書は、ウェブサーバー用にもメールの送受信用にも使用できます。
- 先に準備した サーバー用設定ファイル(openssl-server.cnf)を編集します。
各ディストリビューションでファイル名、パスが異なりますので注意してください。(編集内容、箇所は同じです。)
CentOS,ScientificLinux → /etc/pki/tls/openssl-server.cnfDebian,Ubuntu → /etc/ssl/openssl-server.cnf
[openssl-server.cnf]
... [ usr_cert ] ... basicConstraints=CA:FALSE # デフォルトでCA証明書として使用しません nsCertType = server # デフォルトでサーバー用証明書を作成します ...
nsCertType(証明書のタイプ) の設定項目の意味を簡単に解説しておきます。
server : 文字通りサーバーの意味。
client : 文字通りクライアントの意味。
email : 文字通りメールの意味。
objsign : これは、ソフトウェアなどの署名に用いるものです。
以降の認証局の署名を設定する際に使用されるデフォルトのCA証明書ファイル名を変更したい場合は、同ファイルの以下の項目を編集すると良いでしょう。[openssl-server.cnf]
ここは、ここでの手順どおりであれば、何も編集する必要はないでしょう。... [ CA_default ] ... certificate = $dir/cacert.pem # デフォルトのCA証明書ファイル名 ... private_key = $dir/private/cakey.pem # デフォルトのCA秘密鍵ファイル名 ...
- サーバー用の証明書を作成します。
各ディストリビューションでファイル名、パスが異なりますので最初のコマンドイメージだけ別に記載します。(以降の入力項目などはすべての同じです)
また、起動前にコマンドラインから変数を設定しています。それぞれの変数は、以下のとおりです。- DAYS=”-days 3650″:証明書の有効期限を10年としています。
- SSLEAY_CONFIG=”-config /etc/…/openssl-server.cnf”:使用する設定ファイルを指定しています。
- CATOP=./CA:認証局ディレクトリを論理パスで指定しています。(CentOS,ScientificLinuxでは、/etc/pki/CA がデフォルトなので設定していません)
新規にサーバー証明書を作成します。#1
CentOS,ScientificLinux
# 新規にサーバー証明書を作成します。 $ cd /etc/pki/tls/ $ DAYS="-days 3650" SSLEAY_CONFIG="-config /etc/pki/tls/openssl-server.cnf" /etc/pki/tls/misc/CA -newreq ... Generating a 2048 bit RSA private key ......+++ ..........+++ writing new private key to 'newkey.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. ----- # デフォルト([]内表示)で良い場合は、そのままRETURNでOKです。 # JP: 日本 Country Name (2 letter code) [JP]: JP # Tokyo:東京都 State or Province Name (full name) [Tokyo]: Tokyo # Setagaya:世田谷区 Locality Name (eg, city) [Setagaya]: Setagaya # 会社名 or ドメイン名 Organization Name (eg, company) [example.com]: example.com # 部署などであるが、ここではそのままリターン Organizational Unit Name (eg, section) []: # サイト名--ウェブサーバーで利用する場合は必ずここをサイト名に合わせる Common Name (eg, your name or your server's hostname) []: www.exmple.com # 管理者メールアドレス Email Address [webmaster@example.com]: webmaster@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 # ここで作成したウェブサーバー用の各ファイルは、カレントディレクトリに以下のように作成されます。 $ ls -1 ... newkey.pem # サイト用秘密鍵 newreq.pem # サイト用公開鍵-署名なし(CSR) ...
Debian,Ubuntu
# 新規にサーバー証明書を作成します。 $ cd /etc/ssl/ $ DAYS="-days 3650" SSLEAY_CONFIG="-config /etc/ssl/openssl-server.cnf" CATOP=./CA /usr/lib/ssl/misc/CA.sh -newreq ... Generating a 2048 bit RSA private key ......+++ ..........+++ writing new private key to 'newkey.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. ----- # デフォルト([]内表示)で良い場合は、そのままRETURNでOKです。 # JP: 日本 Country Name (2 letter code) [JP]: JP # Tokyo:東京都 State or Province Name (full name) [Tokyo]: Tokyo # Setagaya:世田谷区 Locality Name (eg, city) [Setagaya]: Setagaya # 会社名 or ドメイン名 Organization Name (eg, company) [example.com]: example.com # 部署などであるが、ここではそのままリターン Organizational Unit Name (eg, section) []: # サイト名--ウェブサーバーで利用する場合は必ずここをサイト名に合わせる Common Name (eg, your name or your server's hostname) []: www.exmple.com # 管理者メールアドレス Email Address [webmaster@example.com]: webmaster@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 # ここで作成したウェブサーバー用の各ファイルは、カレントディレクトリに以下のように作成されます。 $ ls -1 ... newkey.pem # サイト用秘密鍵 newreq.pem # サイト用公開鍵-署名なし(CSR) ...
ここでは、認証したいサーバー名を Common Name で指定します。このサーバー名を間違えると、サーバーが違うので、証明書として意味がなくなります。十分注意しましょう
- 認証局の署名を入れたサーバー証明書を作成します。
各ディストリビューションでファイル名、パスが異なりますので最初のコマンドイメージだけ別に記載します。(以降の入力項目などはすべての同じです)
また、起動前にコマンドラインから変数を設定しています。それぞれの変数は、以下のとおりです。- SSLEAY_CONFIG=”-config /etc/…/openssl-server.cnf”:使用する設定ファイルを指定しています。
- CATOP=./CA:認証局ディレクトリを論理パスで指定しています。(CentOS,ScientificLinuxでは、/etc/pki/CA がデフォルトなので設定していません)
CentOS,ScientificLinux
# 次に認証局の署名を入れたサーバー証明書を作成します。 $ cd /etc/pki/tls/ $ SSLEAY_CONFIG="-config /etc/pki/tls/openssl-server.cnf" /etc/pki/tls/misc/CA -sign ... Using configuration from /etc/.../openssl.cnf # CA証明書を作成する際に設定したパスフレーズ(パスワード)を入力する Enter pass phrase for /etc/.../CA/private/cakey.pem: Check that the request matches the signature Signature ok Certificate Details: Serial Number: b7:be:81:5e:d6:43:63:b2 Validity Not Before: Nov 19 19:43:12 2012 GMT Not After : Nov 19 19:43:12 2013 GMT Subject: countryName = JP stateOrProvinceName = Tokyo localityName = Setagaya organizationName = example.com commonName = 192.168.1.99 emailAddress = webmaster@example.com X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 4A: ... X509v3 Authority Key Identifier: keyid:8A: ... Certificate is to be certified until Nov 19 19:43:12 2013 GMT (3650 days) # yを入力しリターン Sign the certificate? [y/n]: y # yを入力しリターン 1 out of 1 certificate requests certified, commit? [y/n] y Write out database with 1 new entries Data Base Updated Certificate: Data: Version: 3 (0x2) Serial Number: b7:be:81:5e:d6:43:63:b2 Signature Algorithm: sha1WithRSAEncryption Issuer: C=JP, ST=Tokyo, O=example.com, CN=Private CA/emailAddress=webmaster@example.com Validity Not Before: Nov 19 19:43:12 2012 GMT Not After : Nov 19 19:43:12 2013 GMT Subject: C=JP, ST=Tokyo, L=Setagaya, O=example.com, CN=www.example.com/emailAddress=webmaster@example.com Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:ab:57:e2:10:35:e1:54:0e:93:be: ... ... 53:2f Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 4A:23:33:A0:8E:BC:C2:E4:E1:69:B0:4C:B6:81:89:99:FE:62:3E:76 X509v3 Authority Key Identifier: keyid:8A:3A:EF:15:39:09:6B:5E:07:F5:E5:4B:FB:19:F9:00:D6:E3:82:EA Signature Algorithm: sha1WithRSAEncryption 90:66:90:e1:47:3f:da:00:08:68:8d:97 ... ... (省略) ... a5:2d:c6:95 -----BEGIN CERTIFICATE----- MIID8DCCAtigAwIBAgIJALe+gV7WQ2OyMA0GCSqGSIb3DQEB ... ... pS3GlQ== -----END CERTIFICATE----- Signed certificate is in newcert.pem # ここで作成したウェブサーバー用のサーバー証明書は、カレントディレクトリに以下のように作成されます。 $ ls -1 ... newcert.pem # サーバー証明書(プライベート認証局の署名入り) ...
Debian,Ubuntu
# 次に認証局の署名を入れたサーバー証明書を作成します。 $ cd /etc/ssl/ $ SSLEAY_CONFIG="-config /etc/ssl/openssl-server.cnf" CATOP=./CA /usr/lib/ssl/misc/CA.sh -sign ... Using configuration from /etc/.../openssl.cnf # CA証明書を作成する際に設定したパスフレーズ(パスワード)を入力する Enter pass phrase for /etc/.../CA/private/cakey.pem: Check that the request matches the signature Signature ok Certificate Details: Serial Number: b7:be:81:5e:d6:43:63:b2 Validity Not Before: Nov 19 19:43:12 2012 GMT Not After : Nov 19 19:43:12 2013 GMT Subject: countryName = JP stateOrProvinceName = Tokyo localityName = Setagaya organizationName = example.com commonName = 192.168.1.99 emailAddress = webmaster@example.com X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 4A: ... X509v3 Authority Key Identifier: keyid:8A: ... Certificate is to be certified until Nov 19 19:43:12 2013 GMT (3650 days) # yを入力しリターン Sign the certificate? [y/n]: y # yを入力しリターン 1 out of 1 certificate requests certified, commit? [y/n] y Write out database with 1 new entries Data Base Updated Certificate: Data: Version: 3 (0x2) Serial Number: b7:be:81:5e:d6:43:63:b2 Signature Algorithm: sha1WithRSAEncryption Issuer: C=JP, ST=Tokyo, O=example.com, CN=Private CA/emailAddress=webmaster@example.com Validity Not Before: Nov 19 19:43:12 2012 GMT Not After : Nov 19 19:43:12 2013 GMT Subject: C=JP, ST=Tokyo, L=Setagaya, O=example.com, CN=www.example.com/emailAddress=webmaster@example.com Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:ab:57:e2:10:35:e1:54:0e:93:be: ... ... 53:2f Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 4A:23:33:A0:8E:BC:C2:E4:E1:69:B0:4C:B6:81:89:99:FE:62:3E:76 X509v3 Authority Key Identifier: keyid:8A:3A:EF:15:39:09:6B:5E:07:F5:E5:4B:FB:19:F9:00:D6:E3:82:EA Signature Algorithm: sha1WithRSAEncryption 90:66:90:e1:47:3f:da:00:08:68:8d:97 ... ... (省略) ... a5:2d:c6:95 -----BEGIN CERTIFICATE----- MIID8DCCAtigAwIBAgIJALe+gV7WQ2OyMA0GCSqGSIb3DQEB ... ... pS3GlQ== -----END CERTIFICATE----- Signed certificate is in newcert.pem # ここで作成したウェブサーバー用のサーバー証明書は、カレントディレクトリに以下のように作成されます。 $ ls -1 ... newcert.pem # サーバー証明書(プライベート認証局の署名入り) ...
- 作成したサーバー用証明書を移動します。
作成したサーバー用証明書をわかりやすいように認証局(CA)管理下のディレクトリへ移動します。
また、移動する際に、名前を サーバー名.crt (上記で証明書を作成した際にCommon Nameで指定したサーバー名) へ変更しておきます。
各ディストリビューションでファイル名、パスが異なりますので注意してください。
CentOS,ScientificLinux
$ mv /etc/pki/tls/newcert.pem /etc/pki/CA/certs/www.example.com.crt
Debian,Ubuntu
$ mv /etc/ssl/newcert.pem /etc/ssl/CA/certs/www.example.com.crt
- 必要に応じてPEM形式の証明書を作成します。
必要に応じて作成したサーバー証明書をPEM形式の証明書を作成します。
また、ファイル名は サーバー名.pem (上記で証明書を作成した際にCommon Nameで指定したサーバー名) としておきます。
(メール関連で証明書を利用する場合は、PEM形式を使用します。)CentOS,ScientificLinux
$ openssl x509 -in /etc/pki/CA/certs/www.example.com.crt -outform PEM -out /etc/pki/CA/certs/www.example.com.pem
Debian,Ubuntu
$ openssl x509 -in /etc/ssl/CA/certs/www.example.com.crt -outform PEM -out /etc/ssl/CA/certs/www.example.com.pem
- 作成したサーバー用秘密鍵へパスフレーズを埋め込みます。
ここまでで、サーバー用秘密鍵には、パスフレーズ(パスワード)でロックされています。
このパスフレーズ(パスワード)を認証などの際に入力を求められることがあります。その場合、認証がうまくいかない場合もあります。
ここでは、そのパスフレーズを秘密鍵に埋め込むことで、使用する際にパスフレーズを入力しないで使えるようにします。
また、その際、わかりやすいように認証局(CA)管理下のディレクトリへ移動し、名前を サーバー名.key (上記で証明書を作成した際にCommon Nameで指定したサーバー名) へ変更しておきます。
各ディストリビューションでファイル名、パスが異なりますので注意してください。
CentOS,ScientificLinux
$ openssl rsa -in /etc/pki/tls/newkey.pem -out /etc/pki/CA/private/www.example.com.key ... Enter pass phrase for newkey.pem: # サーバー証明書、秘密鍵を作成したときのパスフレーズを入力する writing RSA key
Debian,Ubuntu
$ openssl rsa -in /etc/ssl/newkey.pem -out /etc/ssl/CA/private/www.example.com.key ... Enter pass phrase for newkey.pem: # サーバー証明書、秘密鍵を作成したときのパスフレーズを入力する writing RSA key
サーバー用秘密鍵のパスフレーズ(パスワード)を埋め込んだ秘密鍵を作成しない場合、apacheを起動したときにサーバー鍵を作成した時のパスフレーズの入力を求められます。これを回避するためにも先のパスフレーズを埋め込んで解除します。$ /etc/init.d/httpd restart httpd を停止中: [ OK ] httpd を起動中: Apache/2.2.15 mod_ssl/2.2.15 (Pass Phrase Dialog) Some of your private key files are encrypted for security reasons. In order to read them you have to provide the pass phrases. Server www.example.com:443 (RSA) # サーバー鍵を作成したときのパスフレーズを入力する Enter pass phrase: OK: Pass Phrase Dialog successful. [ OK ]
クライアント用の証明書を作成する。
先に認証局の証明書、鍵が作成できたら、クライアント用の証明書を作成します。
クライアント用証明書は、各クライアントが認証用に使うことができる証明書で各クライアントPCのツールに証明書をインストールするとパスワードなしでもよりセキュアな認証ができるようになります。
- 先に準備した クライアント用設定ファイル(openssl-client.cnf)を編集します。
各ディストリビューションでファイル名、パスが異なりますので注意してください。(編集内容、箇所は同じです。)
CentOS,ScientificLinux → /etc/pki/tls/openssl-client.cnfDebian,Ubuntu → /etc/ssl/openssl-client.cnf
[openssl-client.cnf]
... [ usr_cert ] ... basicConstraints=CA:FALSE # デフォルトでCA証明書として使用しません nsCertType = client, email, objsign # デフォルトでクライアント用証明書を作成します ...
nsCertType(証明書のタイプ) の設定項目の意味を簡単に解説しておきます。
server : 文字通りサーバーの意味。
client : 文字通りクライアントの意味。
email : 文字通りメールの意味。
objsign : これは、ソフトウェアなどの署名に用いるものです。
また、以降の認証局の署名を設定する際に使用されるデフォルトのCA証明書ファイル名を変更したい場合は、同ファイルの以下の項目を編集すると良いでしょう。[openssl-server.cnf]
ここは、ここでの手順どおりであれば、何も編集する必要はないでしょう。... [ CA_default ] ... certificate = $dir/cacert.pem # デフォルトのCA証明書ファイル名 ... private_key = $dir/private/cakey.pem # デフォルトのCA秘密鍵ファイル名 ...
- クライアント用の証明書を作成します。
各ディストリビューションでファイル名、パスが異なりますので最初のコマンドイメージだけ別に記載します。(以降の入力項目などはすべての同じです)
また、起動前にコマンドラインから変数を設定しています。それぞれの変数は、以下のとおりです。- DAYS=”-days 3650″:証明書の有効期限を10年としています。
- SSLEAY_CONFIG=”-config /etc/…/openssl-client.cnf”:使用する設定ファイルを指定しています。
- CATOP=./CA:認証局ディレクトリを論理パスで指定しています。(CentOS,ScientificLinuxでは、/etc/pki/CA がデフォルトなので設定していません)
CentOS,ScientificLinux
# 新規にクライアント証明書を作成します。 $ cd /etc/pki/tls/ $ DAYS="-days 3650" SSLEAY_CONFIG="-config /etc/pki/tls/openssl-client.cnf" /etc/pki/tls/misc/CA -newreq ... Generating a 2048 bit RSA private key ......+++ ..........+++ writing new private key to 'newkey.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. ----- # デフォルト([]内表示)で良い場合は、そのままRETURNでOKです。 # JP: 日本 Country Name (2 letter code) [JP]: JP # Tokyo:東京都 State or Province Name (full name) [Tokyo]: Tokyo # Setagaya:世田谷区 Locality Name (eg, city) [Setagaya]: Setagaya # 会社名 or ドメイン名 Organization Name (eg, company) [example.com]: example.com # 部署などであるが、ここではそのままリターン Organizational Unit Name (eg, section) []: # クライアント名 Common Name (eg, your name or your server's hostname) []: Taro Yamada # メールアドレス Email Address [webmaster@example.com]: taro.yamada@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 # ここで作成したウェブクライアント用の各ファイルは、カレントディレクトリに以下のように作成されます。 $ ls -1 ... newkey.pem # クライアント用秘密鍵 newreq.pem # クライアント用公開鍵-署名なし(CSR) ...
Debian,Ubuntu
# 新規にクライアント証明書を作成します。 $ cd /etc/ssl/ $ DAYS="-days 3650" SSLEAY_CONFIG="-config /etc/ssl/openssl-client.cnf" CATOP=./CA /usr/lib/ssl/misc/CA.sh -newreq ... Generating a 2048 bit RSA private key ......+++ ..........+++ writing new private key to 'newkey.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. ----- # デフォルト([]内表示)で良い場合は、そのままRETURNでOKです。 # JP: 日本 Country Name (2 letter code) [JP]: JP # Tokyo:東京都 State or Province Name (full name) [Tokyo]: Tokyo # Setagaya:世田谷区 Locality Name (eg, city) [Setagaya]: Setagaya # 会社名 or ドメイン名 Organization Name (eg, company) [example.com]: example.com # 部署などであるが、ここではそのままリターン Organizational Unit Name (eg, section) []: # クライアント名 Common Name (eg, your name or your server's hostname) []: Taro Yamada # メールアドレス Email Address [webmaster@example.com]: taro.yamada@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 # ここで作成したウェブクライアント用の各ファイルは、カレントディレクトリに以下のように作成されます。 $ ls -1 ... newkey.pem # クライアント用秘密鍵 newreq.pem # クライアント用公開鍵-署名なし(CSR) ...
ここでは、認証したいクライアント名を Common Name で指定します。
- 認証局の署名を入れたクライアント証明書を作成します。
各ディストリビューションでファイル名、パスが異なりますので最初のコマンドイメージだけ別に記載します。(以降の入力項目などはすべての同じです)
また、起動前にコマンドラインから変数を設定しています。それぞれの変数は、以下のとおりです。- SSLEAY_CONFIG=”-config /etc/…/openssl-client.cnf”:使用する設定ファイルを指定しています。
- CATOP=./CA:認証局ディレクトリを論理パスで指定しています。(CentOS,ScientificLinuxでは、/etc/pki/CA がデフォルトなので設定していません)
CentOS,ScientificLinux
# 次に認証局の署名を入れたクライアント証明書を作成します。 $ cd /etc/pki/tls/ $ SSLEAY_CONFIG="-config /etc/pki/tls/openssl-client.cnf" /etc/pki/tls/misc/CA -sign ... Using configuration from /etc/.../openssl.cnf # CA証明書を作成する際に設定したパスフレーズ(パスワード)を入力する Enter pass phrase for /etc/.../CA/private/cakey.pem: Check that the request matches the signature Signature ok Certificate Details: Serial Number: b7:be:81:5e:d6:43:63:b2 Validity Not Before: Nov 19 19:43:12 2012 GMT Not After : Nov 19 19:43:12 2013 GMT Subject: countryName = JP stateOrProvinceName = Tokyo localityName = Setagaya organizationName = example.com commonName = 192.168.1.99 emailAddress = webmaster@example.com X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 4A: ... X509v3 Authority Key Identifier: keyid:8A: ... Certificate is to be certified until Nov 19 19:43:12 2013 GMT (3650 days) # yを入力しリターン Sign the certificate? [y/n]: y # yを入力しリターン 1 out of 1 certificate requests certified, commit? [y/n] y Write out database with 1 new entries Data Base Updated Certificate: Data: Version: 3 (0x2) Serial Number: b7:be:81:5e:d6:43:63:b2 Signature Algorithm: sha1WithRSAEncryption Issuer: C=JP, ST=Tokyo, O=example.com, CN=Private CA/emailAddress=webmaster@example.com Validity Not Before: Nov 19 19:43:12 2012 GMT Not After : Nov 19 19:43:12 2013 GMT Subject: C=JP, ST=Tokyo, L=Setagaya, O=example.com, CN=www.example.com/emailAddress=webmaster@example.com Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:ab:57:e2:10:35:e1:54:0e:93:be: ... ... 53:2f Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 4A:23:33:A0:8E:BC:C2:E4:E1:69:B0:4C:B6:81:89:99:FE:62:3E:76 X509v3 Authority Key Identifier: keyid:8A:3A:EF:15:39:09:6B:5E:07:F5:E5:4B:FB:19:F9:00:D6:E3:82:EA Signature Algorithm: sha1WithRSAEncryption 90:66:90:e1:47:3f:da:00:08:68:8d:97 ... ... a5:2d:c6:95 -----BEGIN CERTIFICATE----- MIID8DCCAtigAwIBAgIJALe+gV7WQ2OyMA0GCSqGSIb3DQEB ... ... pS3GlQ== -----END CERTIFICATE----- Signed certificate is in newcert.pem # ここで作成したウェブクライアント用のクライアント証明書は、カレントディレクトリに以下のように作成されます。 $ ls -1 ... newcert.pem # クライアント証明書(プライベート認証局の署名入り) ...
Debian,Ubuntu
# 次に認証局の署名を入れたクライアント証明書を作成します。 $ cd /etc/ssl/ $ SSLEAY_CONFIG="-config /etc/ssl/openssl-client.cnf" CATOP=./CA /usr/lib/ssl/misc/CA.sh -sign ... Using configuration from /etc/.../openssl.cnf # CA証明書を作成する際に設定したパスフレーズ(パスワード)を入力する Enter pass phrase for /etc/.../CA/private/cakey.pem: Check that the request matches the signature Signature ok Certificate Details: Serial Number: b7:be:81:5e:d6:43:63:b2 Validity Not Before: Nov 19 19:43:12 2012 GMT Not After : Nov 19 19:43:12 2013 GMT Subject: countryName = JP stateOrProvinceName = Tokyo localityName = Setagaya organizationName = example.com commonName = 192.168.1.99 emailAddress = webmaster@example.com X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 4A: ... X509v3 Authority Key Identifier: keyid:8A: ... Certificate is to be certified until Nov 19 19:43:12 2013 GMT (3650 days) # yを入力しリターン Sign the certificate? [y/n]: y # yを入力しリターン 1 out of 1 certificate requests certified, commit? [y/n] y Write out database with 1 new entries Data Base Updated Certificate: Data: Version: 3 (0x2) Serial Number: b7:be:81:5e:d6:43:63:b2 Signature Algorithm: sha1WithRSAEncryption Issuer: C=JP, ST=Tokyo, O=example.com, CN=Private CA/emailAddress=webmaster@example.com Validity Not Before: Nov 19 19:43:12 2012 GMT Not After : Nov 19 19:43:12 2013 GMT Subject: C=JP, ST=Tokyo, L=Setagaya, O=example.com, CN=www.example.com/emailAddress=webmaster@example.com Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:ab:57:e2:10:35:e1:54:0e:93:be: ... ... 53:2f Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 4A:23:33:A0:8E:BC:C2:E4:E1:69:B0:4C:B6:81:89:99:FE:62:3E:76 X509v3 Authority Key Identifier: keyid:8A:3A:EF:15:39:09:6B:5E:07:F5:E5:4B:FB:19:F9:00:D6:E3:82:EA Signature Algorithm: sha1WithRSAEncryption 90:66:90:e1:47:3f:da:00:08:68:8d:97 ... ... a5:2d:c6:95 -----BEGIN CERTIFICATE----- MIID8DCCAtigAwIBAgIJALe+gV7WQ2OyMA0GCSqGSIb3DQEB ... ... pS3GlQ== -----END CERTIFICATE----- Signed certificate is in newcert.pem # ここで作成したウェブクライアント用のクライアント証明書は、カレントディレクトリに以下のように作成されます。 $ ls -1 ... newcert.pem # クライアント証明書(プライベート認証局の署名入り) ...
- 作成したクライアント用証明書、秘密鍵をPKCS#12フォーマットに変換します。
クライアント側では、証明書と秘密鍵を1つのファイルにまとめたPKCS#12フォーマットが主に用いられます。 そのため、ここで、クライアント用証明書、秘密鍵からPKCS#12フォーマットのファイルを作成します。
クライアント用証明書、秘密鍵からPKCS#12フォーマットのファイルを作成します。#1
CentOS,ScientificLinux
$ cd /etc/pki/tls/
Debian,Ubuntu
$ cd /etc/ssl/
クライアント用証明書、秘密鍵からPKCS#12フォーマットのファイルを作成します。#2 (共通)
$ openssl pkcs12 -export -in newcert.pem -inkey newkey.pem -out taro.yamada.example.com.pfx Enter pass phrase for newkey.pem: # クライアント証明書を作成した時のパスフレーズ Enter Export Password: # ここで作成したPCL12ファイルを展開(読み込む)するためのパスフレーズ Verifying - Enter Export Password: # --再入力
- (必要に応じて)作成したクライアント用証明書、秘密鍵をバックアップしておきます。
(必要に応じて)作成したクライアント用証明書、秘密鍵をわかりやすいように認証局(CA)管理下のディレクトリへバックアップしておきます。
また、移動する際に、名前を クライアント名.crt 、クライアント名.key へそれぞれ変更しておきます。
各ディストリビューションでファイル名、パスが異なりますので注意してください。
CentOS,ScientificLinux
$ mv /etc/pki/tls/newcert.pem /etc/pki/CA/client/certs/taro.yamada.example.com.crt $ mv /etc/pki/tls/newkey.pem /etc/pki/CA/client/private/taro.yamada.example.com.key $ mv /etc/pki/tls/taro.yamada.example.com.pfx /etc/pki/CA/client/private/taro.yamada.example.com.pfx
Debian,Ubuntu
$ mv /etc/ssl/newcert.pem /etc/ssl/CA/client/certs/taro.yamada.example.com.crt $ mv /etc/ssl/newkey.pem /etc/ssl/CA/client/private/taro.yamada.example.com.key $ mv /etc/ssl/taro.yamada.example.com.pfx /etc/ssl/CA/client/private/taro.yamada.example.com.pfx
少なくとも証明書を失効するために証明書は必要になります。 秘密鍵、PKCS#12フォーマットファイルについては、必要ないでしょう。 使うとしたら、PKCS#12フォーマットファイルの再発行となるのでしょうが、その場合は、一旦、先の証明書を失効して、再発行する方が安全ですし、おすすめです。 そうなると秘密鍵のバックアップは、ほとんど意味がないはずです。
- (必要に応じて)PEM形式の証明書を作成します。
(必要に応じて)先に作成、バックアップしたクライアント証明書をPEM形式の証明書を作成します。
CentOS,ScientificLinux
$ openssl x509 -in /etc/pki/CA/client/certs/taro.yamada.example.com.crt -outform PEM -out /etc/pki/CA/client/certs/taro.yamada.example.com.crt.pem
Debian,Ubuntu
$ openssl x509 -in /etc/ssl/CA/client/certs/taro.yamada.example.com.crt -outform PEM -out /etc/ssl/CA/client/certs/taro.yamada.example.com.crt.pem
また、対象となるクライアントへ配布した証明書を無効にするためのに、必ず、サーバー側でも管理しておく必要があります。
各証明書を失効する。
サーバー証明書、クライアント証明書の失効はよくあることです。 各証明書の失効は、以下のように行います。
|
|
|
|
|
|
そこで、とりあえずの対処として、./CA/crlnumber というファイルを作成すればうまくいきます。
|
|
期限切れ証明書を失効する。
サーバー証明書、クライアント証明書の期限切れとなった場合は、自動的に失効するわけではありません。
あくまで、以下のようにopesslを実行して、更新作業が必要になります。
|
認証局の有効期限を更新する。
サーバー、クライアントの証明書に関しては、有効期限が切れたら、失効、再発行の手順で行います。
認証局の場合に限っては、更新作業を行います。
もちろん、更新したからといっても新しい認証局の証明書を再配布する必要はあります。
以下に、現在の証局の有効期限を確認し、10年まで期限を延ばしてみます。
|
|
Diffie-Hellman(DH) パラメータを作成する。
証明書ではないですが、TLS のサーバー側では Diffie-Hellman パラメータを 求められることがあります。(例えば、OpenVPNは必要になります)
その場合、以下のようにして、Diffie-Hellman(DH) パラメータを作成することができます。
|
(おまけ)プライベート認証局を登録(インポート)する
ここまでできたら、プライベート認証局で作成された各証明書について、信用するようにウェブブラウザやメールクライアントソフトにプライベート認証局を登録(インポート)してみましょう。
この登録(インポート)を行っていると、そのウェブブラウザやメールクライアントソフトでは、SSL接続時などに以下のような警告メッセージが表示されなくなります。
ここでは、FireFox, ThunderBirdにプライベート認証局を登録(インポート)してみます。
FireFoxにプライベート認証局を登録(インポート)する
- 先に作成したプライベート認証局のPEM形式の証明書をダウンロードしておきます。
(ここでは、ダウンロードしたファイル名をcapem.pemとしておきます。)
- FireFoxのオプションを起動します。
ツールバーのメニューアイコンをクリックし、オプションをクリックします。
メニューからたどる場合は、[ ツール ] – [ オプション ] をクリックします。
- FireFoxのオプション画面(詳細)から 証明書タブを選択、証明書表示…をクリックします。
- FireFoxの証明書マネージャ画面から 認証局証明書タブを選択、インポート(M)…をクリックします。
- 先にダウンロードした capem.pem を選択し、開く をクリックします。
- 証明書インポート画面で、信頼の範囲を指定し、OK をクリックします。
ここでは、指定した認証局で作成されたウェブサイトおよびメールユーザについて信頼する(上2つにチェック)としています。
以下のように FireFoxの証明書マネージャ画面に追加されればOkです。
画面のOKボタンをクリックし、終了です。
ThunderBirdにプライベート認証局を登録(インポート)する
- 先に作成したプライベート認証局のPEM形式の証明書をダウンロードしておきます。
(ここでは、ダウンロードしたファイル名をcapem.pemとしておきます。)
- ThunderBirdのオプションを起動します。
ツールバーのメニューアイコンをクリックし、[ オプション ] – [ オプション ] をクリックします。
メニューからたどる場合は、[ ツール ] – [ オプション ] をクリックします。
- ThunderBirdのオプション画面(詳細)から 証明書タブを選択、証明書表示…をクリックします。
- ThunderBirdの証明書マネージャ画面から 認証局証明書タブを選択、インポート(M)…をクリックします。
- 先にダウンロードした capem.pem を選択し、開く をクリックします。
- 証明書インポート画面で、信頼の範囲を指定し、OK をクリックします。
ここでは、指定した認証局で作成されたウェブサイトおよびメールユーザについて信頼する(上2つにチェック)としています。
以下のように ThunderBirdの証明書マネージャ画面に追加されればOkです。
画面のOKボタンをクリックし、終了です。
ここまで設定しておくと、一般ユーザは、警告メッセージを見ることなく、安全にSSL接続ができるでしょう。
もちろん、パブリック認証局であれば、このような作業も必要ありません。
このような簡単な作業であれば、社内向けにプライベート認証局によるSSL接続でも良いかもしれませんね。
あちこちに記述していて散漫な感じがしていましたし、間違いがあった場合などに更新する手間も多くなりがちでしたので、1つの記事でまとめることにしました。
さすがに、多くてちょっと大変でしたが、これで、全体像が見やすく、理解しやすくなったのではないかとも思います。 また、散在する各記事の認証ファイル系の解説も、都度、本記事へ集約するように更新していくつもりです。
それはされおき、
昨今では、セキュリティ強化への取り組みが目立ってきました。その中でもとりわけインターネットでのセキュリティ強化は、課題も多いのが現状です。 ただ、すぐにでも、少しでもセキュリティ強化したい場合は、OpenSSLの取り組みを行うことで強化を図ることができます。
まだ、取り組まれていない方は、早々の取り組みをお勧めいたします。
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない、検索ができないことがあります。
2014年10月4日, 12:29 AM
初めまして。
fortigateでクライアント認証をしようしたVPNの設定をする事になり
ネットで調べて設定していましたが、うまくいかず詰まっていましたが
こちらの方法を参考に証明書を作成した所、無事に設定することが出来ました。
詳しい解説ありがとう御座いました。
忘備録のためブログに残そうと思っています。
その際にリンクを張りたいのですが宜しいでしょうか。
2014年10月4日, 12:58 AM
Nickさん
コメントありがとうございます。
何かの参考になったのであれば、嬉しい限りです。
また、リンクは、ご自由にどうぞ。
2015年12月29日, 12:56 PM
詳細な解説、大変役に立ちました。
誤記がありましたので、細かいですが指摘させていただきます。
誤) exmaple.com, examle.com
正) example.com
2015年12月30日, 10:10 AM
Nonbe さん
コメントありがとうございます、管理人です。
ほんと、このようなご指摘は助かります、ありがとうございました。
2017年5月25日, 5:25 PM
とても細かい解説大変参考になりました!
ありがとうございます。
1点だけ誤記がありましたので、報告させていただきます。
「4-6 必要に応じてPEM形式の証明書を作成します。」のコマンド部分の指摘です。
前)
openssl x509 -in /etc/ssl/CA/certs/taro.yamada.example.com.crt -outform PEM -out /etc/ssl/CA/certs/taro.yamada.example.com.crt.pem
後)
openssl x509 -in /etc/ssl/CA/client/certs/taro.yamada.example.com.crt -outform PEM -out /etc/ssl/CA/client/certs/taro.yamada.example.com.crt.pem
2017年5月26日, 5:46 AM
けろきんsan
コメントありがとうございます、管理人です。
ご指摘ありがとうございました。修正しておきました。
また何かありましたらコメントいただけるとありがたいです。
2017年8月30日, 10:11 PM
訂正でも何でも無いコメントですが、是非、感謝の意を表したくて書き込みます。
証明書作成のノウハウサイトは多くありますが、自分の環境で一番確実且つ正確に作成できたのがここのサイトでした、本当に感謝申し上げます。
しかし残念ながらChrome58以降で、HTTPSの自己証明書がNET::ERR_CERT_COMMON_NAME_INVALID になった為、若干それらを設定に加筆した上で現在は使用している次第です。
今後も引き続き維持をしていただけたら有りがたいです。
2017年8月31日, 2:23 AM
hkondo さん
コメントありがとうございます、管理人です。
救われるコメントありがとうございました。
また、色々ご意見いただければと思います。:)
2017年11月13日, 6:59 PM
よくまとめられていて、いつも助かっています。
ありがとうございます。
気になった点として、
要求書作成時点で”-days 3650″を指定しているにも関わらず
リストを見ると、署名付加後は有効期限が1年になってしまっているように思います。
これは間違いではないのでしょうか?