最終更新日:2013年8月31日
以下ではOpenSSLを使った自己認証局(CA)の構築方法について述べていきます。
自己認証局を使うことで、社内(組織内)で利用であればベリサインなどの商用の認証局を使わずに、サーバ証明証書を作成することが可能になります。(外部公開用のサーバなどでは、運用上の制限や「証明の保証」という点で問題があるので自己認証局を使わずにベリサインなどの商用認証局でサーバ証明書を証明してもらうようにすべきでしょう)
OpenSSLパッケージのインストールは次のコマンドを実行して行います。
Debian・Ubuntu Redhat・CentOS・SL-Linux $ sudo apt-get install openssl
# yum install openssl
パッケージのOpenSSLをインストールした場合、OpenSSLを利用するために必要な設定ファイルやディレクトリは以下の通りです。
設定内容 Debian・Ubuntu Redhat・CentOS・SL-Linux 自己認証局作成用スクリプト /usr/lib/ssl/misc/CA.sh
(/usr/lib/ssl/misc/CA.pl でも可)/etc/pki/tls/misc/CA CA関連データディレクトリ /etc/ssl/CA
("./demoCA"から、変更します。変更はOpenSSL設定ファイルで行います)/etc/pki/CA OpenSSL設定ファイル /etc/ssl/openssl.cnf /etc/pki/tls/openssl.cnf
最初にOpenSSLの設定ファイルを編集しておきます。
自己認証局作成用のスクリプトファイルを次の内容となるように編集します。
※CAとなるサーバのFQDN名は、DNSに登録済の名前を使ってください。
設定内容 設定値(Debian系) 設定値(Redhat系) CA証明書の有効期限 7300日(約20年) 7300日(約20年) サーバ証明書の有効期限 3650(約10年) 3650(約10年) CA関連のデータディレクトリ /etc/ssl/CA /etc/pki/CA CA用のプライベートキーファイル cakey.pem cakey.pem CA証明書のファイル cacert.pem cacert.pem CAとなるサーバのFQDN名 ※ ca.example.jp ca.example.jp
■ Debian系の場合(/usr/lib/ssl/misc/CA.sh 修正)
::
::
if [ -z "$DAYS" ] ; then DAYS="-days 3650" ; fi # 10 year
CADAYS="-days 7300" # 20 years
::
::
if [ -z "$CATOP" ] ; then CATOP=/etc/ssl/CA ; fi
CAKEY=./cakey.pem
CAREQ=./careq.pem
CACERT=./cacert.pem
::
::
■ Redhat系の場合(/etc/pki/tls/misc/CA 修正)
::
::
if [ -z "$DAYS" ] ; then DAYS="-days 3650" ; fi # 10 year
CADAYS="-days 7300" # 20 years
::
::
if [ -z "$CATOP" ] ; then CATOP=/etc/pki/CA ; fi
CAKEY=./cakey.pem
CAREQ=./careq.pem
CACERT=./cacert.pem
::
::
CA関連データディレクトリが存在しないことを確認したら、以下のコマンドを実行してCAを構築します。 既にCA関連データディレクトが存在する場合には、すでに自己認証局が構築されています。 再度、CAの構築をやり直したい場合はCA関連のデータディレクトリ削除してから以下のコマンドを実行してください。なお、その場合には以前の自己認証局によって認証されたサーバの証明書は無効になってしまうことに注意してください。
$ sudo/usr/lib/ssl/misc/CA.sh -newca--- (Debian系の場合)
# /etc/pki/tls/misc/CA -newca--- (Redhat系の場合)
以下のような画面が表示されるので、必要な箇所で入力を行います。
CA certificate filename (or enter to create)
[Enter]
Making CA certificate ...
Generating a 2048 bit RSA private key
...................................................+++
...............................................................................................................................+++
writing new private key to '/etc/pki/CA/private/./cakey.pem'
Enter PEM pass phrase: CAのプライベートキーファイル用のパスフェーズを入力[Enter]
Verifying - Enter PEM pass phrase: パスフェーズの確認入力[Enter]
-----
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) [JP]: [Enter]
State or Province Name (full name) [Tokyo-to]: [Enter]
Locality Name (eg, city) [Chiyoda-ku]: [Enter]
Organization Name (eg, company) [Example Corp]: [Enter]
Organizational Unit Name (eg, section) []: [Enter]
Common Name (eg, your name or your server's hostname) []: ca.example.jp[Enter]
Email Address [webmaster@example.jp]: [Enter]
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: [Enter]
An optional company name []: [Enter]
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for /etc/pki/CA/private/./cakey.pem: 上で入力したパスフェーズを指定[Enter]
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number:
f4:11:9f:8c:a3:d8:0c:bb
Validity
Not Before: Aug 31 08:01:24 2013 GMT
Not After : Aug 26 08:01:24 2033 GMT
Subject:
countryName = JP
stateOrProvinceName = Tokyo-to
organizationName = Example Corp
commonName = ca.example.jp
emailAddress = webmaster@example.jp
X509v3 extensions:
X509v3 Subject Key Identifier:
6B:25:A3:D9:BE:D3:47:83:14:5D:96:EB:78:82:2B:02:D4:37:20:E0
X509v3 Authority Key Identifier:
keyid:6B:25:A3:D9:BE:D3:47:83:14:5D:96:EB:78:82:2B:02:D4:37:20:E0
X509v3 Basic Constraints:
CA:TRUE
Certificate is to be certified until Aug 26 08:01:24 2033 GMT (7300 days)
Write out database with 1 new entries
Data Base Updated
これでCA関連データディレクトリに必要なファイルが作成されてCAの作成は終了です。 ここまでの作業でCA関連データディレクトリ以下に
が作成されています。
- private/cakey.pem : 認証局(CA)の秘密鍵
- cacert.pem : 認証局(CA)の証明書(公開鍵)
作成した証明書は以下のコマンドで内容の確認ができます。
openssl x509 -in cacert.pem -text
ブラウザ等で自己認証局(CA)で認証された証明書を持ったサーバにアクセスした場合、そのままでは自己認証局自体が信頼できないことから接続に「信頼できないサイトへのアクセス」といったようなメッセージを都度出してきてしまいます。
自己認証局を「信頼のおける認証局」とクライアントPCに登録すれば、信頼できないというメッセージを出さないようにできます。
それには、自己認証局の証明書をルート証明書として各クライアントに設定すれば、以後、この自己認証局は信頼されるようになりメッセージが出てこないようになります。自己認証局の情報を使いWindows用にルート証明書を作るには、自己認証局(CA)のサーバで以下の手順で DER形式の証明を作成します。
Debian・Ubuntu Redhat・CentOS・SL-Linux $ cd /etc/ssl/CA
$ sudo openssl x509 -inform pem -in cacert.pem -outform der -out cacert.cer
# cd /etc/pki/CA
# openssl x509 -inform pem -in cacert.pem -outform der -out cacert.cer
作成されたDER形式の cacert.cer をWindowsマシンへ送り、これを証明書としてインポートします。インポートは、[コントロールパネル]-[インターネットオプション]-[コンテンツ]-[証明書]-[信頼されたルート証明書]タブを開き、[インポート]ボタンを選択します。インポートするファイルとして cacert.cer を指定します。
証明書を配置する場所を確認してくるので、「証明書をすべて次のストアに配置する」 を選択して 「信頼されたルート証明機関」 を選びます。
なお、メールソフトとして Tunderbird を使っている場合には、証明書ストアは Windows 標準のものではなく Thunderbird 独自のものとなるため、Tunderbird のメニューから、[ツール] - [オプション] を選択し、[詳細] - [証明書] - [証明書を表示] を選択します。
[認証局証明書] - [インポート]を選びルート証明書としてインポートします。
インポートの際に、何に対する認証局として扱うかを確認してくるので、すべてにチェックをいれて [OK] とします。
以上で、クライアントPCに自己認証局のルート証明書が配置されます。
自己認証局(CA)が構成できていれば、各サーバやクライアントからの署名要求書(CSR)に対して電子証明書を発行する事が可能になります。
CAサーバによる実際の署名の作業は次のようになります。
openssl.conf は CA を作成するための設定となっているので、サーバ証明書を作成するための設定ファイルとして"openssl_server.cnf"を作成します。
Debian・Ubuntu Redhat・CentOS・SL-Linux $ cd /etc/ssl
$ sudo cp openssl.cnf openssl_server.cnf
# cd /etc/pki/tls/
# cp openssl.cnf openssl_server.cnf
openssl_server.conf の以下箇所を次のように変更しサーバ証明書を作成するための設定に直します。
(openssl_server.cnf)
::
::
[ usr_cert ]
::
basicConstraints=CA:FALSE
::
::
# This is OK for an SSL server.
nsCertType = server
Debian・Ubuntu Redhat・CentOS・SL-Linux $ cd /etc/ssl
$ openssl ca -config openssl_server.cnf -in csr.pem -keyfile CA/private/cakey.pem \
-cert CA/cacert.pem -out certs/server.pem
# cd /etc/pki/tls/
# openssl ca -config openssl_server.cnf -in csr.pem -keyfile ../CA/private/cakey.pem \
-cert ../CA/cacert.pem -out certs/server.pem
-in サーバの署名要求書(CSR)ファイル
-keyfile 認証機関の秘密鍵ファイル
-cert 認証機関の証明書ファイル
-out 作成するサーバ証明書ファイル
sing configuration from openssl_server.cnf
Enter pass phrase for CA/private/cakey.pem: CAのパスフレーズ入力 [Enter]
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 1 (0x1)
Validity
Not Before: Sep 1 05:45:26 2007 GMT
Not After : Aug 31 05:45:26 2017 GMT
Subject:
countryName = JP
stateOrProvinceName = Tokyo-to
organizationName = Example Corp
organizationalUnitName =
commonName = sv.example.jp
emailAddress = webmaster@example.jp
::
::
Certificate is to be certified until Aug 31 05:45:26 2017 GMT (365 days)
Sign the certificate? [y/n]: [Enter]
1 out of 1 certificate requests certified, commit? [y/n] y[Enter]
Write out database with 1 new entries
Data Base Updated
以上で、電子証明書がcertsディレクトリに「server.pem」として作成されます。 作成したserver.pemをCSR依頼元に送付してください。
CA ならびにサーバ証明書をセットしたサーバやクライアント、かならずDNSによる名前解決ができるようにしておいてください。 名前解決ができない場合には証明書のチェックで確認できなくなります。
また、この証明書を利用するクライアント側では、サーバへのアクセスにはIPアドレスで無く、必ずFQDN(DNSに登録されている正式な名前)でアクセスするようにしてください。
・Debianではドキュメントは/usr/share/doc/openssl以下にある。
Copyright© 1998-2013 ROBATA.ORG