2017年3月19日日曜日

MyDNS と Let's Encrypt を使って,FreeBSD 上の apache24 を https 化してみた(その2)

 FreeBSD 上の apache24 で運用している個人サイトの https 化(通信の暗号化)の話の(その2)である。
目次
 (a) その1:MyDNS を使って web サーバーをたてる
 (b) その2:オレオレ認証を使った https 化(今回)
 (c) その3:Let's Encrypt を使ったサーバー認証
 (d) その4:vhost や ssl などの apache24 の設定
 (e) その5:サイトの内容に関する注意点(最終)

 今回は,通称オレオレ認証(自己署名証明書)を使って,apache24 の https 化の設定をしてみよう。
必要なものは,
 ・秘密鍵(private key)
 ・証明書署名要求(csr)
 ・サーバー証明書(crt)
である。 これら(実際には key ファイルと crt ファイル)があれば,https 化が可能となる。 今回はオレオレ証明書をopensslで作る(詳細版) (ろば電子が詰まっている)を参考にした。

(1) 自己署名証明書作成
まずは apache24 の設定ファイルがあるディレクトリに移動しておこう。 FreeBSD の場合は,以下のディレクトリになる。
# cd /usr/local/etc/apache24

 次に「秘密鍵(Private Key)」を作ろう。 これは以下のコマンドを実行する。
# openssl genrsa -out private.key -aes128 2048
 ここでは 2048 ビットの暗号化キーを作っている(はず…)。
結果は以下のようになる。
Generating RSA private key, 2048 bit long modulus
...........................................................................................................+++
.................................................................+++
e is 65537 (0x10001)
Enter pass phrase for private.key: ←パスフレーズ
Verifying - Enter pass phrase for private.key: ←パスフレーズ(確認)
 ここで「←パスフレーズ」と書いた部分でパスワードを入力している。

 上記のキーはパスワードありの秘密鍵だったが,apache24 の再起動の度にパスワードを要求されるらしい。
それはあまりに煩雑なので,パスワードなしのキーファイルを以下のようにして作る。
# openssl rsa -in private.key -out server.key
このコマンドを入れると,以下のようにパスワードを聞かれるので入力すると「server.key」という秘密鍵ができる。
Enter pass phrase for private.key:
writing RSA key ←パスフレーズ

 次に「証明書署名要求(CSR; Certificate Signing Request)」を作る。 コマンドは以下の通り。
# openssl req -new -sha256 -key private.key -out server.csr
実行すると,以下のようになる。 パスワードありの鍵を使っているので,パスワードを要求されている。 その他にもいろいろ聞かれる。赤字で書いた部分が入力した部分であるが,多くは ENTER のみでいいみたい。
Enter pass phrase for private.key: ←パスフレーズ
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) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:Minato-ku
Organization Name (eg, company) [Internet Widgits Pty Ltd]:(enter)
Organizational Unit Name (eg, section) []:(enter)
Common Name (e.g. server FQDN or YOUR name) []:www.hogehoge.mydns.jp
Email Address []:(enter)

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:(enter)
An optional company name []:(enter)
 csr フィアルの中身の確認は以下のコマンドで可能らしい。
# openssl req -text < server.csr

 最後に「サーバー証明書」を作ろう。 それには以下のコマンドを実行する。
# openssl x509 -days 3650 -req -signkey server.key < server.csr > server.crt
 すると,以下のような表示がなされて,「server.crt」ファイルが出来上がる。
Signature ok
subject=/C=JP/ST=Tokyo/L=Minato-ku/O=Internet Widgits Pty Ltd/CN=www.hogehoge.mydns.jp
Getting Private key

念のために server.key ファイルと server.crt ファイルの permission を変更して,認証ファイルの作成は終了である。
# chmod 0400 private.key
# chmod 0400 server.*


(2) apache24 の設定  次に apache24 の設定を行おう。
 まずは /usr/local/etc/apache24/httpd.conf の設定を行う。 これもどっかのサイトを参考にしたので,細かい点はわかってなかったりする。
まずは,以下の4個のモジュールを有効にしておくらしい。
LoadModule socache_shmcb_module libexec/apache24/mod_socache_shmcb.so
LoadModule socache_dbm_module libexec/apache24/mod_socache_dbm.so
LoadModule socache_memcache_module libexec/apache24/mod_socache_memcache.so
LoadModule ssl_module libexec/apache24/mod_ssl.so
ここで「ssl」モジュールはわかるが,他のはなんで必要なんやろ?

次に,extra/httpd-ssl.conf の読み込み行をコメントアウトしておく。
# Secure (SSL/TLS) connections
Include etc/apache24/extra/httpd-ssl.conf
ssl の設定(https でのアクセスへの応答の設定)はこの httpd-ssl.conf ファイルで行う。

 次に,その /usr/local/etc/apache24/extra/httpd-ssl.conf の設定を行う。 まずは,プロトコルの指定をしておこう。 どうやら「TLSv1.2」と「TLSv1.1」以外は危険らしいので,以下の2個だけを指定している。 いろんなサイトには他のも入れてあったりするが,古いのは危険らしい。
SSLProtocol +TLSv1.2 +TLSv1.1
SSLProxyProtocol +TLSv1.2 +TLSv1.1

次に,<VirtualHost _default_:443> の設定をしよう。
#   General setup for the virtual host
DocumentRoot "/usr/local/www/data" ← Web site のトップページのあるディレクトリ
ServerName www.hogehoge.mydns.jp
ServerAdmin email@address.com
ErrorLog "/var/log/httpd-ssl-error.log"
TransferLog "/var/log/httpd-ssl-access.log"

 最後にサーバー証明書の指定をして出来上がりである。
SSLCertificateFile "/usr/local/etc/apache24/server.crt"
SSLCertificateKeyFile "/usr/local/etc/apache24/server.key"
 今回は「/usr/local/etc/apache24/」でオレオレ証明書を作ったので,そこにファイルがあるとして指定している。


(3) httpd の再起動
 最終的に apache24 を再起動して,アクセスして,それっぽくなっていれば出来上がりである。 
service apache24 restart
 ちなみに,最近(2017年3月時点)では,オレオレ証明書を使ったサイトは「危険なサイト」としてブラウザが警告を発する。 例えば Firefox なら「安全な接続ではありません」と言われたりする。 これはちゃんと接続できていることを示しているので,設定としてはうまくいっている。

 もし「接続できません」と出れば,どこかの指定を間違っているので,https 化とは別の問題のはずである。
(その3)Let's Encrypt を使ったサーバー認証に続く

0 件のコメント: