しばらく前にGoogleが「サイトは全部httpsに移行しろー」と言っていたが、面倒そうだったのとChromeで見れなくなる訳でもなくURLの左側に保護されていないと出る程度だったので放置していた。
しかし、最近Googleでホームページ名やドメイン名で検索してもサイトが検索結果に出てこなくなり、久々に記事を書こうと言う事もありちゃんとhttps対応する事にしたのだが、これが大変であった。
https対応するにあたり、サイトのSSL証明書が必要になる。安いものだと証明書は年間1000円程度だが、ドメインごとに必要となるので3ドメインの場合約3000円で利益がほぼ無い趣味用サーバーとしてはまぁまぁ良い値段になってしまう。Let’s Encryptと言うサービスを使えば無料で出来るとの事なので、Let’s Encryptを使う事にした。
参考:https://blog.doizaki.com/entry/2016/02/07/152141
https化するにはまずapacheにmod_sslを入れる。そしてポート443を受信ポートとして追加設定する。ここは特に問題なく完了。というか「yum install mod_ssl」を実行しただけ。
参考:https://knowledge.sakura.ad.jp/10534/
Let’s Encryptを使うスクリプトがGitHubにあるので、ダウンロードする。
git clone https://github.com/letsencrypt/letsencrypt
が、接続エラーが出て取得出来ない。
fatal: HTTP request failed
ブラウザでサイトを開いてみるとcertbotに移動した様だ。改めてcertbotをGitHubから取得する。
git clone https://github.com/certbot/certbot
が、こちらも接続エラーが出て取得出来ない。
少し前にテストでcurlを使おうとしたところssl通信が上手くいかなった。nssのバージョンが古い事が原因の様で、nssのバージョンを上げれば良いとあったのだが、yum update nssとしてもNothing to doと出てしまい色々試してみたが上手く行かず放置していた。今回これをちゃんと修正する必要がある様だ。
参考:https://qiita.com/murai-taisuke/items/173b3cbbd697e630047d
問題はここからだ。OSはCent OS 6.6の状態でOSのアップデートを長らくしていなかったのだが、これがよろしくなかった。
yum updateとしてもNothing to doと出て何も起きない。yumによるアップデート系が全く機能していない。
Cent OS 6系統から7系統にアップデートする情報があったので試したが、Cent OS 6.5まではアップデートツールを使い7にアップデート出来る様だが、6.6以降だと不具合があり7にアップデート出来ないらしい。下記サイトの情報で試した所、rpmのkey追加までは動いた。
参考:https://dibtp.hateblo.jp/entry/2015/12/31/164104
しかし、アップグレードのコマンド実行で
invalid data in .treeinfo
と表示され詰んでしまった。yum update動かない、7へのアップデートも出来ない、6.6の状態でsslを使おうにもnssもアップデート出来ない。同様の悩みを持っている相談は多く見かけるが、「7にクリーンインストールした方がいいよ」の書き込みが目立ち有効な解決手段が見つからない。
諦めて7にクリーンインストールする事も考えたが、ゼロからのインストールとなるとOSインストールメーラー設定http設定独自Proxyサーバーとしても使っていたりと作業が多すぎるためかなり面倒だ。出来ればクリーンインストールはしたくない。
なんとかCent OS 6.6で各種アップデートが動かない状態から抜け出せないかと情報を漁っていた所、下記情報を見つけた。
参考:https://qiita.com/iwahiroJP/items/1ad664d12a460be299b9
yumは更新情報をrepoに記述しているサイトから情報を取得するが、高速化の為にrikenのサイトに向くように設定する、と言う事だ。
問い合わせ先サイトを変えてみたいがどのサイトにすれば良いか分からなかったので、これを試してみようとrepoファイルを編集。
余談だが、テキストファイルの編集に以前はviを使っていたが、操作が独特で扱い辛いのでnanoにした所使い勝手が良かった。
他のrepoリストの情報もありremiとやらが入っていなかったので良く分からないがこちらも追加してみる。
参考:https://qiita.com/bezeklik/items/9766003c19f9664602fe
yum clean all後yum update nssすると・・・なんと、バージョンが上がった!前は3.19.0とかだった。
Installed Packages
nss.x86_64 3.36.0-8.el6
再度GitHubからcertbotをダウンロードしてみると、今度はダウンロード出来た。 中を見てみるとcertbot-autoとかletsencrypt-autoなるスクリプトがある。実行してみる。
が、使えるpythonが無い、と怒られる。letsencryptのスクリプトはpython 2.7が必要だが2.6が何かで必要で共存できないからcentos-release-sclを入れてからpython27を入れる、と言う情報があるのでやってみる。
が、yum install centos-release-sclもcentos-reelase-scl-rhもpython27も「No matching Packages to list (そんなパッケージ無い)」と怒られる。Cent OS 6.6でもcentos-release-sclを入れて、と言う情報は多々見かけるのになぜ見つからないのか分からない。
とりあえずyum updateで全部アップデートしてみるか、と試してみると・・・なんか一杯アップデートされた。完了後/etc/redhat-releaseを確認してみると、6.10 (Final)となっており、OSが6.10まで上がった様だ。
CentOS release 6.10 (Final)
再度centos-release-sclのインストールを試みてみる・・・が、相変わらずそんなパッケージ無いと怒られる。python27も同様。
certbot-autoをもう一度試してみる・・・と、今度はなにやらpython3を勝手にインストールし始めて動き出した。
一旦キャンセルし、certbotのパラメーターを設定し再度実行。フォーマットは
./certbot-auto certonly --webroot -w /home/hoge/web -d domainonename.net -w /home/nanasi/web -d domaintwoname.net
の様に、webのパスとドメインを渡す。マルチドメインの場合 -w と -d を複数指定する。
メールアドレスや同意等の入力があり、なんか上手く行った様だ。/etc/letsencryptフォルダーを見るとファイルも生成されている。
httpのconfファイルの更新もcertbot-autoを使って自動で出来る様だ。
./certbot/certbot-auto --apache -d domainname.net
サイトの設定ファイルを検知して、更新するか聞いてきたのでOKしてみた所、ファイルが自動更新されてSSL関連の項目が追加された。httpsのリダイレクトも設定すると言う選択肢があってこちらを選んでみたが、リダイレクトの設定は失敗しましたと出てしまった。
httpsでサイトにアクセスしてみると・・・アクセス出来た!なんとかなった!良かった!
Let’s Encryptは3ヶ月で証明書の期限が切れるので、定期的に更新する必要があるのでcronを設定。下記内容のファイルを/etc/cron.d/letsencrypt等の適当な名前で入れておく。
参考:https://qiita.com/takahiko/items/a08895550727b95b6c36
参考:https://kohkimakimoto.hatenablog.com/entry/2016/09/15/180119
00 16 * * 2 root /pathto/certbot/certbot-auto renew --post-hook "service httpd
restart"
httpをhttpsにリダイレクトする様にconfファイルを編集し、80に来たリクエストを443にリダイレクト。これでhttpで開いてもhttpsで開きなおす。
参考:https://qiita.com/yoshizaki_kkgk/items/123e766229fd3910530e
<VirtualHost *:80>
ServerName nefastudio.net:80
RewriteEngine on
RewriteCond %{HTTP_HOST} ^nefastudio\.net
RewriteRule ^/(.*)$ https://nefastudio.net/$1 [R=301,L]
</VirtualHost>
これで一安心・・・と思っていた時期が私にもありました。
まだまだ先は長かった。
後半に続く。