(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

WEBサイトのSSL/TLS化

当たり前ですが、これをやっとかないとお話になリません。
管理人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情報のメールアドレスを適当なアドレス(適当名+@ドメイン)にして、自前メールサーバーで受信できるようにします。

てな具合で詳細は省略しますが、上記のメールアドレスで必ずメール受信できるよう、しつこいぐらいに動作確認してください。でないと、証明書の発行連絡を受け取れなくなってしまいます。

証明書署名要求(CSR)

基本的には、「オレオレ証明書編」の通りですが、SSL BOX のサポートのページ(下記)の説明を参考に、CSRへの入力内容を決めていきます。

新規取得お申し込み
http://www.sslbox.jp/support/man/new_application.php
Apache+MODSSL
http://www.sslbox.jp/support/man/csr_make_flow_modssl.php
識別名について
http://www.sslbox.jp/support/man/csr_make_flow_modssl.php

管理人TKのホームページは今のところ個人の趣味のページであり、商売やっているわけではないので、その辺も考慮しつつの作業となります(こんなんで証明書とかやっていいんかいな・・・)。

というわけで識別名(ディスティングイッシュネーム)。
CSR作成時にその場で考えながら入力してもよいのですが、前もって決めておいたほうがよいかと。
結論から言うと、国コードとCommon Name以外は証明書には反映されませんでしたので適当でいいです(CoreSSLの安いサービスだからでしょうか)。

項目略称補足
Country NameC登録時必須。国コード
State or Province NameST登録時必須。都道府県名
Locality Name(Locality)L登録時必須。市町村名
Organization NameO登録時必須。運営組織名。個人なので適当に
Organization Unit NameOU省略可。運営組織の部署名
Common NameCN入力必須。実際に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ファイルは、後ほど証明書の申請に使用しますのでひとまずこのまま置いておきます。

CSRによる申請

SSL BOXの管理画面へログインし(実際には SSL BOX も Star Domain も全部同じ管理画面ですが)、いよいよ証明書の申請を行います。
ログイン画面は省略し、手続きの要となる部分だけ記載します。

まずは下記の画面ヘ進み、「新規申請」ボタンを押して次の画面へ進みます。

SSLBOX-00.png

CSR(証明書署名要求)の入力

SSLBOX-01.png

コモンネームには、証明書の対象となるドメイン名(CSRのCNに設定したもの)を入力します。
CSR入力欄には、「証明書署名要求(CSR)」で作成したCSRをそのまんま貼り付けます。
それから、重要なのが署名アルゴリズムで、必ず「SHA-2(SHA-256)」を選択するようにします(SHA-1はいずれ使用できなくなるため)。
ちなみに、上の画面例の CSR はデタラメですのであしからず。
入力できたら、次の画面へ進みます。

申請登録情報の入力

次の画面では、下記の入力エリアがありますので適宜入力します。
(画面キャプチャーし忘れた・・・orz)

項目例(画面から抜粋)補足
承認用メールアドレス選択のみ可。冒頭で準備した承認確認メールアドレスのいずれかを選択
★組織名(ローマ字)例) Netowl Inc.CSRの組織名と合わせておくのが無難かも(確証なし)
★氏名[Lastname Firstname(ローマ字)]例) Yamada Taroローマ字ですが、姓、名の順なので注意
★役職(ローマ字)例) NoneNoneでいいんじゃないかと
★郵便番号例) 6048262
★国コードJPのみ選択可能だった(CSRから読み出したものを表示?)
★都道府県選択のみ可
★市区町村(ローマ字)例) Kyoto
★住所(ローマ字)例) Shuei Building 2F,Shorin-cho 98
★電話番号例) 81-75-123-4567道楽なのでIP電話だな
FAX番号例) 81-75-123-4567FAXないし。
★メールアドレス例) info@example.com

備考:★は入力必須*1

次の画面へ進むと入力内容の確認画面が表示されますので、間違いないようなら、

「次へ進む(申請を確定します)」

ボタンを押すと、次の画面へ進み、下記のようなメッセージが表示されて申請が完了します(多分:-)。

取得申請を完了しました。
承認メールアドレス「xxx@xxxxx」にメールが届きますので承認作業をお願いします。 

あとは承認メールが来るのを待つだけです(といいつつすぐ来ました:-)。

承認メール受信、承認

承認メールに記載された URL へブラウザでアクセスすると、下記のような画面が表示されますので、これまた承認メールに記載されている validation code を入力します。

SecureCore-Validation.png

正しいコードを入力し、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の管理画面からもダウンロードすることができます。

証明書のWEBサーバーへの組み込み+仮想ホスト追加

下記のファイルをコピーして、証明書用の仮想ホストの定義を追加します。

なお、上記の 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

SSL/TLS通信により証明書を表示

openssl コマンドでSSL/TLS通信により証明書を確認することができます。

$ openssl s_client -connect 192.168.1.20:443 -showcerts -servername tls.angelcurio.com

-connectで指定したホスト:ポートへ接続し、証明書を表示してくれます。

補足:
HTTPSの仮想ホストは、TLSでのみ使用可能、というような英文をどっかで読みましたが、詳細は不明。

以上、疲れた。


*1 どこまで正確な情報を求められているかは不明。入力欄を埋めておけばよいだけかも・・・

添付ファイル: fileSecureCore-Validation.png 240件 [詳細] fileSSLBOX-00.png 236件 [詳細] fileSSLBOX-01.png 252件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2022-02-15 (火) 10:06:33