さくらのVPSのサイトをHTTPS化

さくらの VPS で運用しているサイト(Railsアプリ)を Let’s Encrypt で HTTPS 化した。言っとくけどこのブログじゃないよ。

HTTPのポートを開放

まず、HTTPS のポート 443 を開放する。/etc/sysconfig/iptables ファイルを編集。

[takatoh@tk2-254-36564 ~]$ cd /etc/sysconfig
[takatoh@tk2-254-36564 sysconfig]$ sudo vim iptables

つぎの行を追加。

-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

iptables を再起動。

[takatoh@tk2-254-36564 sysconfig]$ sudo service iptables restart
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Flushing firewall rules: [ OK ]
iptables: Unloading modules: [ OK ]
iptables: Applying firewall rules: [ OK ]
iptables: Loading additional modules: ip_conntrack_ftp [ OK ]

certbot-auto のセットアップと証明書の自動生成

「certbot-auto」は Let’s Encrypt が提供しているクライントツールで、SSL証明書を取得したり延長したりできる。ここでは、最新版を取得する。

[takatoh@tk2-254-36564 bin]$ sudo wget https://dl.eff.org/certbot-auto
--2019-01-13 09:41:36-- https://dl.eff.org/certbot-auto
dl.eff.org をDNSに問いあわせています… 151.101.72.201, 2a04:4e42:36::201
dl.eff.org|151.101.72.201|:443 に接続しています… 接続しました。
HTTP による接続要求を送信しました、応答を待っています… 200 OK
長さ: 63562 (62K) [application/octet-stream]
`certbot-auto' に保存中

100%[======================================>] 63,562 --.-K/s 時間 0.002s

2019-01-13 09:41:39 (24.3 MB/s) - `certbot-auto' へ保存完了 [63562/63562]

[takatoh@tk2-254-36564 bin]$ sudo chmod 700 /usr/bin/certbot-auto

いまインストールした certbot-auto を使って、証明書を自動生成する。

[takatoh@tk2-254-36564 ~]$ sudo certbot-auto certonly --webroot -w /var/www/lathercraft/public -d www.lathercraft.net --email lathercraft@gmail.com

途中、いろんなパッケージをインストールしたりするのでy(yes)を入力する。しばらくすると利用規約が表示されるので、A(agree)を入力。最後に↓こんなメッセージが出ればOK。

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/www.lathercraft.net/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/www.lathercraft.net/privkey.pem
Your cert will expire on 2019-04-12. To obtain a new or tweaked
version of this certificate in the future, simply run certbot-auto
again. To non-interactively renew all of your certificates, run
"certbot-auto renew"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

- We were unable to subscribe you the EFF mailing list because your
e-mail address appears to be invalid. You can try again later by
visiting https://act.eff.org.

……じゃないな、e-mail が invalid だと言ってる。あとから試せるとも言ってるので、とりあえず先に進む。この時点で証明書類はこんな感じになっている。

[takatoh@tk2-254-36564 ~]$ sudo ls -l /etc/letsencrypt/live/www.lathercraft.net/
合計 4
-rw-r--r-- 1 root root 692 1月 13 09:53 2019 README
lrwxrwxrwx 1 root root 43 1月 13 09:53 2019 cert.pem -> ../../archive/www.lathercraft.net/cert1.pem
lrwxrwxrwx 1 root root 44 1月 13 09:53 2019 chain.pem -> ../../archive/www.lathercraft.net/chain1.pem
lrwxrwxrwx 1 root root 48 1月 13 09:53 2019 fullchain.pem -> ../../archive/www.lathercraft.net/fullchain1.pem
lrwxrwxrwx 1 root root 46 1月 13 09:53 2019 privkey.pem -> ../../archive/www.lathercraft.net/privkey1.pem

Nginxの設定

SSL 対応にする。こんなふうに書き換える。

    #listen      80;
    listen      443 ssl;

    ssl_certificate      /etc/letsencrypt/live/www.lathercraft.net/cert.pem;
    ssl_certificate_key  /etc/letsencrypt/live/www.lathercraft.net/privkey.pem;

Nginx を再起動。

[takatoh@tk2-254-36564 conf.d]$ sudo service nginx restart
Stopping nginx: [ OK ]
Starting nginx: [ OK ]

これでOKのはず。まだアプリが SSL 対応していないのでバナー画像に https でアクセスしてみたら、ちゃんと表示された。なのでここまではOKのようだ。

RailsアプリのSSL対応

これは簡単。config/envronments/production.rb ファイルのつぎの箇所を修正すればいい。

  # config.force_ssl = true
  config.force_ssl = true

コメントアウトしてあるのを外すだけだ。そして再起動。

[takatoh@tk2-254-36564 environments]$ sudo service unicorn_lathercraft restart
reloaded OK

OK。大丈夫そうだ。

httpをhttpsにリダイレクト

最後に、http でのアクセスを https にリダイレクトする設定をする。Nginx の設定に戻ってつぎの設定を追加する。

server {
    listen       80;
    server_name  www.lathercraft.net;
    return       301 https://www.lathercraft.net;
}

Nginx を再起動して完了。

証明書の自動更新設定

Let’s Encrypt の証明書は有効期限が3ヶ月と短いので、自動更新するように設定する。更新は certbot-auto renew コマンドでできるので、これを root ユーザの cron に登録する。

[takatoh@tk2-254-36564 ~]$ sudo -s
[root@tk2-254-36564 takatoh]# crontab -l
no crontab for root
[root@tk2-254-36564 takatoh]# crontab -e
0 4 * * 0 certbot-auto renew --post-hook "service unicorn_lathercraft restart" > /dev/null 2> /dev/null

これで毎週月曜日の午前4時に更新するようになる。

[追記]

上の、Nginx のリダイレクトの設定では、http でのアクセスはどんなパスでも全て https のルートにリダイレクトされてしまう。なので、つぎのように変更した。

server {
    listen       80;
    server_name  www.lathercraft.net;

    location ~ ^/(.*)$ {
        return 301 https://www.lathercraft.net/$1;
    }
}

これで各ページも https にリダイレクトされるようになった。

Windows10その後

というか iTunes のその後、というか。

結局、Windows を再インストールして、アプリを一つずつインストールしながら iTunes がちゃんと動くかどうかを確認していった。ついでに、先週のエントリを書いた時点では気づかなかったけど、Dropbox の同期もできていなかったので、これも確認しながら。

で、どうやら RLogin という SSH 接続に使っているターミナルクライアントが怪しいということになって、これを除いた構成で様子を見ることにした。ところが、再インストール直後は大丈夫だった iTunes と Dropbox がしばらく経つといつの間にかやっぱり繋がらなくなっている。どうも、少なくとも RLogin 単独のせいではないようで、なぜつながらないのかさっぱりわからない。

そういうわけなので、montana で iTunes と Dropbox を動かすのは諦めて、ノートPCの sofa で動かすことにした。sofa のストレージは SSD で容量が少ないので、samba サーバ(wplj)に共有フォルダを新しく作って、それを sofa の M:ドライブに割り当てて音楽保管用のフォルダを作った(なにせアルバム1000枚、60GBもあるので)。この構成だと、家の WiFi の外では使えないけど、それは諦めることにした。

というわけで、montana は WEB ブラウジングとゲーム用のマシンになった。ゲームのセーブデータは全部消えたけどな(←こないだも言った)!

iTunes Storeにつながらない

Windows10 のセットアップが終わって、一息ついたと思ったら、iTunes Store につながらない。「ネットワークの接続を確認して、やり直してください。」と言われる。CD からインポートした曲は聴けるんだけど(当然)、Store から購入した曲が聴けない。これじゃ、何のために Windows の再インストールをしたんだかわからないじゃないか。

たしか昨日、Windows のインストールが終わったあと、最初にインストールしたのが iTunes だ。その時はちゃんとつながったはずだ。ということは、そのあとにインストールしたアプリが悪さをしてるか、何か設定が変わってしまったか。

はぁ、一つずつ消して確かめてみるか……

[追記]

iTunes 以外のアプリを一つずつ消しながら確かめてみた。結果、iTunes 以外の、あとからインストールしたアプリを全部消しても、さらには iTunes 自体を再インストールしてもつながらなかった。たぶん、アプリのインストールをしてるどこかで何かの設定が変わっちゃったんだ。

結局、Windows の再インストールしかないか。

Windows10を再インストールした

昨日のことだけど、時間が取れなかったので今日書く。

先日こわれて(こわして)しまった montana の Windows10、アマゾンで頼んだインストールメディア(DVD)が届いた。届いた Windows には LAN アダプタがついていた、というか LAN アダプタに Windows10 がついていたというのか。そういえば注文した時にバンドル版だと書いてあったような気がする。それにしてもこの LAN アダプタ、10/100Mbps なんだけど今時こんなのあるんだね。誰が使うんだろう?

それはともかく、Windows10 の再インストールだ。インストール自体はインストーラに従っていけばすんなり終わるので、詳細は割愛する。ただ、デフォルトでは「ドキュメント」ほかいくつかのフォルダが OneDrive 上に保存されるようになっている。この点だけ、ローカルドライブに保存するように変更した。

まず、画面右下の OneDrive のアイコン(雲のアイコン)を右クリックして「設定」を選ぶ。「自動保存」タブの「フォルダの更新」ボダンをクリックして出てくるウィンドウに「デスクトップ」と「写真」、「ドキュメント」があるので、それぞれ「保護の停止」をクリックする。これで OneDrive じゃなくてローカルドライブに保存するようになる。

あとはアプリのインストールだけど、使ってるのはほとんどフリーソフト(例外は iTunes と MS Office、B’s Recorder くらい)なので、Chocolatey を使ってインストールした。コマンド一発でダウンロードからインストールまでしてくれるので楽でいい。

ただ、Ruby だけは別にインストールした。というのは Chocolatey でインストールすると Devkit が含まれていないものがインストールされるからだ。これだとネイティブなライブラリ(RDiscount とか)がインストールできない。なので、RubyInstaller のダウンロードページから Devkit を含んだインストーラをダウンロードしてインストールした。

さて、これで一通りのセットアップは終了。アイコンがごちゃごちゃしていたデスクトップもさっぱりしたので、そこはよかったかも。

ゲームのセーブデータは全部消えたけどな!

Windows10がこわれた

というかこわしちゃった、というか。新年早々、なんて運が悪いんだ。

こわれたのは Windows10 マシンの montana なんだけど、経緯はこうだ。しばらく前からちょっと調子が悪かった。DropBox が同期できないし、iTunes のアップデートにも失敗する。どうもネットにうまくつながらなくて失敗してるらしいんだけど、一方でブラウザ等ではなんの問題もなく使えてた。とはいえ、不便もあったし、連休中でちょうどいいので、以前作ってあった回復ドライブ(USBメモリ)をつかって、インストールし直そうとしたわけだ。

で、いったん電源を落として、回復ドライブの USBメモリをさしてスイッチオン。F12キーを押してブートメニュー画面に入ってから、「USB Storage Drive」を選択。これで回復ドライブから起動する。あとはメニューに従っていくと、「このPCを回復しています」というメッセージと一緒に進捗を示すパーセンテージが表示される。

あとは待つだけかとおもったら、5%くらいの進捗のところで、「PCを初期状態に戻すときに問題が発生しました。変更は行われませんでした。」というメッセージが!

この時点で選択肢は「キャンセル」しか無い。仕方なくキャンセルすると、起動したあとの最初の方の画面に戻ってやり直し。ところが結局は同じ結果になる。何度繰り返しても同じ。

試しに USBドライブを抜いて起動してみたけど、ファイルが削除されてしまったらしくハードディスクからは起動できず。ここで手詰まり。

というわけで、Windows10 がこわれてしまった。何が回復ドライブだ。ふざけんな!