(2015-09-02)
「その1-オレオレ証明書編」では、自前で作った証明書でとりあえずWEBサイトをSSL化(TLS化)しました。
(2016-06-14追記 本ページの内容は Raspbian wheezy での手順だが、Jessie でも大体同じようにできると思う、おそらく。)
(2016-07-25 証明書の期限が切れました^^;)
今回は、本物の(有償のちゃんとした)認証局で証明書を取得して、Apache2+mod_ssl環境へ組み込んでみたいと思います。
それにしても近頃は値段がずいぶん安くなったものです。その分、証明書内の組織名や所在地、団体名などの確認もまあそこそこ(ていうか書類審査なしでメール受信確認だけだし)なんでしょうけど。でも、少なくとも暗号化通信という観点ではまったく問題ないのではないかと思っております。
ちなみにこれから作成しようとしている証明書の団体名などはてきとーですのであしからず(なんせ個人のサイトですから)。
目次
SSL BOX(エスエスエル ボックス) を使います。
証明書が何種類か提供されていますが、一番安そうな
CoreSSL(ワイルドカードじゃないほう)
というのでやってみようと思います。
申請は上記サイト経由で、実際の認証局は Comodo社 https://www.comodo.com/ というところになります。
価格ですが、1年間の契約で1,500円(税抜き)ですから。1ヶ月に缶ジュース1本買うのを我慢すればまかなえる金額です(もっと安いところもあるようですが・・・)。
ちなみに、現在ご覧になっているこのサイトのドメインも、上記の会社の関連(というか同じ会社)のサービスを使用しております。
独自ドメインを取得したときの作業内容はこっち→「独自ドメイン取得」
独自ドメイン取得にも書きましたが、上のサイト運営会社(ネットオウル)のサービスでは代金を直接支払う代わりに予めプリペイドをチャージしそれから支払いに充てる、というようなことが必要で少々難儀ではあるが、まあお安いので目をつぶります。
登録の基本的な流れは下記のようになっていますのでここでは説明しません。途中、証明書を設定するサーバーを選択する場面がでてきますが、管理人TKは自前のサーバーなので「その他のサーバーで利用する」を選択します。
プリペイドのチャージについてもは本筋からそれるので割愛します。
http://www.sslbox.jp/application/
http://www.sslbox.jp/support/man/certification_flow.php#securecore
ちなみによくある質問はこっち http://www.sslbox.jp/support/faq.php
当たり前ですが、これをやっとかないとお話になリません。
管理人TKはすでに「オレオレ証明書編」で実施済みなので、ここでは説明は省略っす。
それと、忘れずに、SSL/TLSで公開するURLのドメイン名(FQDN)でIPアドレスが引けるように、DNSの設定を変更しておきます(後述のCSRへ書き込む Common Name)。
WEBサーバーをSSL/TLS化した時の秘密鍵が必要です。
秘密鍵はすでに「オレオレ証明書編」で作成済みなので、そっちを参照のこと。
WEBサーバーのSSL/TLS化と合わせて先に準備しておいたほうが良いのが、これです。
SSL BOXで証明書の申請を出す際、承認結果を受け取りるために、以下のいずれかのメールアドレスが必要になります。
SSL BOXの申請手続き画面では、上記1, 2のメールアドレスが自動でドロップダウンリストに表示される仕組みになっています(メールアドレスの直接入力は不可)。
1は、任意のメールアドレスでOKですが、WHOIS情報にあらかじめ登録しておく必要があり、また、WHOIS情報のメールアドレスを変更してから24時間以上経たないと、申請手続き画面のリストに表示されないようです(WHOIS情報へは、ドメインの種類にもよりますが数十分程度で反映されるはず)。
2は、自前(or 自分管理)のメールサーバーが必要で、前述のadmin~のメールを受信できるようにします。
注意点としては、1, 2ともに、多かれ少なかれメールアドレスを外部へさらすことになるので、spamメール対策などを考慮する必要があるかもしれません。
というわけで、せっかくなのでWHOIS情報のメールアドレスを適当なアドレス(適当名+@ドメイン)にして、自前メールサーバーで受信できるようにします。
てな具合で詳細は省略しますが、上記のメールアドレスで必ずメール受信できるよう、しつこいぐらいに動作確認してください。でないと、証明書の発行連絡を受け取れなくなってしまいます。
基本的には、「オレオレ証明書編」の通りですが、SSL BOX のサポートのページ(下記)の説明を参考に、CSRへの入力内容を決めていきます。
管理人TKのホームページは今のところ個人の趣味のページであり、商売やっているわけではないので、その辺も考慮しつつの作業となります(こんなんで証明書とかやっていいんかいな・・・)。
というわけで識別名(ディスティングイッシュネーム)。
CSR作成時にその場で考えながら入力してもよいのですが、前もって決めておいたほうがよいかと。
結論から言うと、国コードとCommon Name以外は証明書には反映されませんでしたので適当でいいです(CoreSSLの安いサービスだからでしょうか)。
項目 | 略称 | 補足 |
Country Name | C | 登録時必須。国コード |
State or Province Name | ST | 登録時必須。都道府県名 |
Locality Name(Locality) | L | 登録時必須。市町村名 |
Organization Name | O | 登録時必須。運営組織名。個人なので適当に |
Organization Unit Name | OU | 省略可。運営組織の部署名 |
Common Name | CN | 入力必須。実際にURLとして使うものをFQDNで正確に記述 |
opensslでCSR作成時に、上記以外にも Email Address, A challenge password, An optional company name の入力を要求されますが、それらは空欄にせよ、と先のサポートページにありますのでその通りにします。
で、実際のCSRファイル作成ですが、以下の様なテンプレートファイルを作成し、openssl コマンド実行時に指定することで、入力の手間・誤りを防ぐことができます(man reqで確認できます)。
ファイル名は適当でよいです(ここでは csr.templateとした)。
先程も書きましたが、Contry Name と Common Name 以外は適当でいいっす:-)。
# cat csr.template [ req ] distinguished_name = req_distinguished_name [ req_distinguished_name ] C = Country Name (2 letter code) C_default = JP ST = State or Province Name (full name) ST_default = Tokyo L = Locality Name (eg, city) L_default = Chiyoda O = Organization Name (eg, company) O_default = AngelCurio personal OU = Organizational Unit Name (eg, section) OU_default = personal CN = Common Name (e.g. server FQDN or YOUR name) CN_default = tls.angelcurio.com
上記ファイルを作っておいて、下記のコマンドを実行すると、リターンキーの入力だけで、CSRファイルを作成することができます。
署名アルゴリズムとして SHA-2 を使用するために、-sha256 オプションを忘れずに指定します。
# openssl openssl req -new -config csr.template -key ../ssl.key/server.key -sha256 -out tls.angelcurio.csr 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]: State or Province Name (full name) [Tokyo]: Locality Name (eg, city) [Chiyoda]: Organization Name (eg, company) [AngelCurio Personal]: Organizational Unit Name (eg, section) [personal]: Common Name (e.g. server FQDN or YOUR name) [tls.angelcurio.com]:
といった具合です。内容の確認は下記。
# openssl req -text -noout -in tls.angelcurio.csr | head Certificate Request: Data: Version: 0 (0x0) Subject: C=JP, ST=Tokyo, L=Chiyoda, O=AngelCurio personal, OU=personal, CN=tls.angelcurio.com Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) (以下省略)
Subject: のところにテンプレートの内容が反映されているのが分かります。
出来上がったCSRファイルは、後ほど証明書の申請に使用しますのでひとまずこのまま置いておきます。
SSL BOXの管理画面へログインし(実際には SSL BOX も Star Domain も全部同じ管理画面ですが)、いよいよ証明書の申請を行います。
ログイン画面は省略し、手続きの要となる部分だけ記載します。
まずは下記の画面ヘ進み、「新規申請」ボタンを押して次の画面へ進みます。
コモンネームには、証明書の対象となるドメイン名(CSRのCNに設定したもの)を入力します。
CSR入力欄には、「証明書署名要求(CSR)」で作成したCSRをそのまんま貼り付けます。
それから、重要なのが署名アルゴリズムで、必ず「SHA-2(SHA-256)」を選択するようにします(SHA-1はいずれ使用できなくなるため)。
ちなみに、上の画面例の CSR はデタラメですのであしからず。
入力できたら、次の画面へ進みます。
次の画面では、下記の入力エリアがありますので適宜入力します。
(画面キャプチャーし忘れた・・・orz)
項目 | 例(画面から抜粋) | 補足 |
承認用メールアドレス | 選択のみ可。冒頭で準備した承認確認メールアドレスのいずれかを選択 | |
★組織名(ローマ字) | 例) Netowl Inc. | CSRの組織名と合わせておくのが無難かも(確証なし) |
★氏名[Lastname Firstname(ローマ字)] | 例) Yamada Taro | ローマ字ですが、姓、名の順なので注意 |
★役職(ローマ字) | 例) None | Noneでいいんじゃないかと |
★郵便番号 | 例) 6048262 | |
★国コード | JPのみ選択可能だった(CSRから読み出したものを表示?) | |
★都道府県 | 選択のみ可 | |
★市区町村(ローマ字) | 例) Kyoto | |
★住所(ローマ字) | 例) Shuei Building 2F,Shorin-cho 98 | |
★電話番号 | 例) 81-75-123-4567 | 道楽なのでIP電話だな |
FAX番号 | 例) 81-75-123-4567 | FAXないし。 |
★メールアドレス | 例) info@example.com |
備考:★は入力必須*1
次の画面へ進むと入力内容の確認画面が表示されますので、間違いないようなら、
「次へ進む(申請を確定します)」
ボタンを押すと、次の画面へ進み、下記のようなメッセージが表示されて申請が完了します(多分:-)。
取得申請を完了しました。 承認メールアドレス「xxx@xxxxx」にメールが届きますので承認作業をお願いします。
あとは承認メールが来るのを待つだけです(といいつつすぐ来ました:-)。
承認メールに記載された URL へブラウザでアクセスすると、下記のような画面が表示されますので、これまた承認メールに記載されている validation code を入力します。
正しいコードを入力し、Next>ボタンを押すと、下記のメッセージが表示され承認完了となります。
Thank you You have entered the correct Domain Control Validation code. Your certificate will now be issued and emailed to you shortly. Please close this window now.
さらにもうしばらくすると、証明書が記載されたメールが承認メールと同じ宛先に届きます。
証明書は、SSL BOXの管理画面からもダウンロードすることができます。
下記のファイルをコピーして、証明書用の仮想ホストの定義を追加します。
なお、上記の default-ssl は「その1-オレオレ証明書編」で修正済みのものです。
証明書の組み込み方法ですが、基本的には下記ページの手順通りです。
手順 http://www.sslbox.jp/support/man/install_flow_modssl.php
証明書と中間証明書の2つをSSL BOXの管理画面からダウンロードしてファイルに保存します。
CORESSLxxxxx.certが証明書、CORESSLxxxxxInt.certが中間証明書です。
その後、vhost-ssl-angelcurio-coressl を変更します。変更箇所は下記のとおりです。
ServerName tls.angelcurio.com SSLCertificateFile /usr/local/apache2/conf/ssl.crt/CORESSLxxxxx.cert SSLCACertificateFile /usr/local/apache2/conf/ssl.crt/CORESSLxxxxxInt.cert
ファイル名は、Apache2のSSLCertxxxの指定と合っていれば何でもいいです。
その他、設定はお好みでどんぞ。
あとはいつものおまじないとして下記を実行して、設定を有効化します。
# /usr/local/apache2/bin/a2ensite-me vhost-ssl-angelcurio-coressl # /usr/local/apache2/bin/apache2ctl-me graceful
2016-07-25 証明書の有効期限が切れています(2016-07-15で期限切れ)。予めご了承ください。
ブラウザで https://tls.angelcurio.com/ へアクセスして、証明書を確認します。
前述したとおり、CSRへ含めたはずの組織名などは証明書には一切入っておらず、指定したCommon Name (ホスト名、FQDN)と国(JP)のみが含まれていました。SSL/TLSを試したかっただけなので、この方が都合がよいのです。結果オーライということで。
それから、有効期限も承認メールで承認した日から1年間となっていました。
2016-01-27追記:
このサイトを https://tls.angelcurio.com/raspberrypi/ でも公開してみました。
内容は http://www.angelcurio.com/raspberrypi/ とまったく同じです。
証明書ファイルを直接指定して、中身を表示することができます。
openssl x509 -in CORESSLxxxxx.cert -text
肝の部分はこんな感じ。
Signature Algorithm: sha256WithRSAEncryption Issuer: C=JP, ST=OSAKA, L=OSAKA, O=SecureCore, CN=SecureCore RSA DV CA Validity Not Before: Jul 15 00:00:00 2015 GMT Not After : Jul 14 23:59:59 2016 GMT Subject: OU=Domain Control Validated, OU=CoreSSL DV, CN=tls.angelcurio.com
あるいは中間証明書を指定。
openssl x509 -in CORESSLxxxxxInt.cert -text
openssl コマンドでSSL/TLS通信により証明書を確認することができます。
$ openssl s_client -connect 192.168.1.20:443 -showcerts -servername tls.angelcurio.com
-connectで指定したホスト:ポートへ接続し、証明書を表示してくれます。
補足:
HTTPSの仮想ホストは、TLSでのみ使用可能、というような英文をどっかで読みましたが、詳細は不明。
以上、疲れた。