SSL証明書
シマンテック(旧ベリサイン)等の認証局から、署名付きの証明書を発行してもらうには費用がかかります。
そもそもCA(Certification Authority)キーが予めブラウザ側に登録されていないといけませんが
独自でCAの証明書を発行し、認証することも可能です。
- シマンテック(旧ベリサイン)等の認証局から、署名付きの証明書を発行してもらう。
-
CSR(署名要求:Certificate Signing Request)を作成する。
オンライン申請システムにCSRを貼り付けて証明書を発行。
証明書をダウンロードする。
という流れになります。
- これからのサーバ証明書手順
-
今までは上記手順でも良かったのですが、最近ではブラウザ側の扱いが変わってきて通信出来なくなったりします。
原因はRFC2818に
Common Name の利用が既存の実践ですが、これは不当であり、代わりに認証機関には、subjectAltName 拡張がある場合、それは、身元として使われなければなりません(MUST)
という内容が書かれている為と思われます。
なのでこれからは認証機関に申請するCSRにもCommon Nameだけではなく、subjectAltNameにDNS名としてホスト名を入れたもので申請する必要があるようです。
一般社団法人日本スマートフォンセキュリティ協会(JSSEC)様より
「Androidアプリのセキュア設計・セキュアコーディングガイド」
というのが公開されており、この手順に従って作成すると良いようです。
■ newca.sh CA証明書を発行するためのスクリプト
■ openssl.cnf スクリプト実行時に読み込まれる設定ファイル
■ newsv.sh サーバ証明書を発行するためのスクリプト
スクリプト内や設定ファイルの設定値を自分の環境に合わせればとっても簡単にできちゃいます。
無償で SSL/TLS 証明書を発行してくれるサービス
- Let’s Encrypt 正式版としてリリースされました。
-
自動で証明書の更新ができ、
Web サーバーを停止することなく証明書を取得できるようになったようです。
→ certbotのコマンドがhttpdの停止・開始をしていました。
# yum -y --enablerepo=epel install python-certbot-apache
# certbot --apache certonly
証明書や秘密鍵は「/etc/letsencrypt/archive/」以下に保存され、
/etc/letsencrypt/live/<ドメイン名>/ 配下にシンボリックリンクが出来ます。
これをssl.conに反映してhttpdリスタート 簡単にいけました。
サーバー証明書
/etc/letsencrypt/live/<ドメイン名>/cert.pem
証明書+中間CA証明書
/etc/letsencrypt/live/<ドメイン名>/fullchain.pem
サーバー秘密鍵
/etc/letsencrypt/live/<ドメイン名>/privkey.pem
中間CA証明書
/etc/letsencrypt/live/<ドメイン名>/chain.pem
但し、これは自身がグローバルIPを持っている場合です。ローカルIPでNAT環境ではだめでした。
# systemctl stop apache2
# certbot certonly --standalone
/etc/letsencrypt/live/domain/ 配下に作成されるので反映して
# systemctl start apache2
※<ドメイン名>はFQDNです。
アップデートはcron登録すればOK
cron登録の例
#!/bin/sh
systemctl stop httpd
sleep 5
certbot renew
systemctl start httpd
exit
実行権限を付けるのを忘れずに
# chmod +x certbot.sh
------------------------------------------------------------
cron登録の例
Certbotのサンプルでは毎日実行する例が掲載されていました。
/etc/cron.d/certbot
0 0,12 * * * root /bin/python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew
以上で完了です。 - CA局手順
-
1.OpenSSL の設定をCA局用に変更
2.CA局用秘密鍵と証明書要求(CSR)作成
3.自分で自分を署名
4.秘密鍵のパスフレーズを削除
5.CA局の証明書(ルート証明書)をWEBブラウザにインストールできる様にします - サーバ証明書手順
-
1.OpenSSL の設定をサーバ用に変更
2.サーバ秘密鍵とサーバ証明書要求(CSR)作成
3.CA局で署名
4.秘密鍵のパスフレーズを削除
5.サーバ秘密鍵とサーバ証明書をApacheのssl.confに指定 - 独自CA局でより汎用的に署名する
-
# For the CA policy
[ policy_match ]
countryName = supplied
stateOrProvinceName = supplied
organizationName = supplied
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
独自SSLサーバ認証局(CA局)の作成
Verisign等の認証機関と契約する程ではないがSSLしたい。
自分自身がCA局になっちゃえばいいんです。 いわゆるオレオレ証明書
デフォルト設定だと、国名・地域・会社名が署名してもらいたい証明書と同一が必須ポリシーになっています。
このポリシーを変更するにはopenssl.conf を以下のように修正します。
SSL 証明書の確認
以下のフォームに入力の上「送信する」ボタンを押して下さい。