文書の過去の版を表示しています。
目次
自己署名サーバ証明書の作成
暗号化通信で何かと利用する、秘密鍵、公開鍵、証明書を作成する。
環境
- Ubuntu
- Ubuntu 14.04.1 LTS 64bit
パッケージ名 | バージョン |
---|---|
openssl | 1.0.1f-1ubuntu2.7 |
サーバの鍵を作成
きちんと信用されるCAに署名してもらうにしても、自己署名するにしても、とりあえずは署名してもらう鍵をつくらなければ。まぁ、無料でできる自己署名にするわけですが。
鍵長が 1024 bit では安全ではないといわれる昨今なので、2048 bit で。
$ openssl genrsa -des3 -out server.key.secure 2048
パスワードを聞かれるので2回同じものを入力。
今作った鍵はパスワードで暗号化された鍵。サーバデーモンで使用する場合、毎回パスワードを入力して使用していては利便性に問題があるので、パスワードを解除した鍵を作成。
$ openssl rsa -in server.key.secure -out server.key
Certificate Signing Request を作成
Certificate Signing Request (CSR) を作成する。
$ openssl req -new -key server.key -out server.csr
いろいろ質問されるので答えておく。適当にエンターすると署名できない。'.'を入力するとブランクになる。
- Country Name (2 letter code): 国コード
- State or Province Name: 州名/都道府県名
- Locality Name: 市町村名
- Organization Name: 組織名
- Organizational Unit Name: 組織内ユニット名
- Common Name: アクセスされるホスト名を設定する www.example.com 等
- Email Address: 連絡先のメールアドレス
- A challenge password: 未入力でエンター
- An optional company name: 未入力でエンター
この csr ファイルをこれから作る CA に署名させる。
証明書と鍵の格納場所
サーバやCAの証明書や鍵は、 /etc/ssl に格納するのが標準らしい。
- /etc/ssl/certs 証明書 (公開情報)
- ディレクトリのパーミッションは 755 root:root
- 内部に格納するファイルのパーミッションも 644 root:root 等
- /etc/ssl/private 秘密鍵 (機密情報)
- ディレクトリのパーミッションは 710 root:ssl-cert
- 内部に格納するファイルのパーミッションも 640 root:ssl-cert 等に設定して慎重に管理
Certification Authority (CA) を作成
初めに Certification Authority (CA) の設定と使用するディレクトリを準備する。
CA で使うディレクトリやファイルのパスを設定する。
/etc/ssl/openssl.cnf の [ CA_default ] 内を変更。
$ sudo vi /etc/ssl/openssl.cnf
dir = /etc/ssl/CA # Where everything is kept
CAが使用するファイルをまとめるディレクトリを作成。
$ sudo mkdir -p /etc/ssl/CA/certs $ sudo mkdir -p /etc/ssl/CA/private $ sudo mkdir -p /etc/ssl/CA/newcerts $ sudo mkdir -p /etc/ssl/CA/crl
private ディレクトリには秘密鍵を置くのでパーミッションを変更する。
$ sudo chmod 700 /etc/ssl/CA/private
CAが使用するファイルを作成。1つ目がCAが発行した証明書につけられる通し番号を記憶するファイル。2つ目は発行された証明書を記録するファイル。
$ sudo sh -c "echo '01' > /etc/ssl/CA/serial" $ sudo touch /etc/ssl/CA/index.txt
Certification Authority (CA) の鍵を作成
ルート認証局の鍵と証明書を作成する。10年間有効で鍵長は 2048 bit。
$ openssl req -newkey rsa:2048 -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650
作成中に国コードなどの質問があるが、なにか入力しておかないと後で署名できなくなる。
Country Name、 State of Province Name、 Organization Name はサーバの CSR を作成した時と同じものを入力する必要がある。
作成したファイルを移動する。
$ sudo mv cakey.pem /etc/ssl/CA/private/ $ sudo chown root:root /etc/ssl/CA/private/cakey.pem $ sudo chmod 600 /etc/ssl/CA/private/cakey.pem $ sudo mv cacert.pem /etc/ssl/CA/ $ sudo chown root:root /etc/ssl/CA/cacert.pem $ sudo chmod 644 /etc/ssl/CA/cacert.pem
ブラウザインポート用の証明書を作成
作成した CA をブラウザ等に信頼できる CA として登録する場合に使用する証明書を作成。
$ openssl x509 -inform pem -in /etc/ssl/certs/cacert.pem -outform der -out ca.der
ca.dar をブラウザに読み込ませる。
作成したCAで署名
server.csr を作成したCAで署名する。10年間有効な署名。
$ sudo openssl ca -in server.csr -config /etc/ssl/openssl.cnf -days 3650
cakey.pem のパスワードを要求されるので入力する。
著名するかの確認があるので、y を入力する。
Sign the certificate? [y/n]:
CA のデータベースに登録するか聞かれるのでこれも y を入力する。
1 out of 1 certificate requests certified, commit? [y/n]
署名されたファイルは /etc/ssl/CA/newcerts/01.pem にある。以後署名するたびに番号が増えていく。
server-cert.pem ふぁいるから server-cert.crt を作成する。
$ cp /etc/ssl/CA/newcerts/01.pem ./server-cert.pem $ cp ./server-cert.pem ./server-cert.crt $ vi ./server-cert.crt
—–BEGIN CERTIFICATE—– から —-END CERTIFICATE—– までをのこして、他を全削除する。
作成された pem crt をサーバに設定する等して使用する。