雑な備忘録

レベルを上げて技術で殴れる人間になりたい

Let's Encryptを導入し、nginxをTLSおよびHTTP/2化する

目次

今回の目的

  • Webサーバ(nginx)のHTTPSおよびHTTP/2化
  • Let’s Encryptの証明書自動更新

作業環境

さくらのVPS 1G
CentOS release 6.8 (Final)
nginx 1.9.5以上

新しいバージョンのnginxを導入

nginxをhttp/2化する際、1.9.5以上のバージョンを要求されます。
作業時点のyumリポジトリでは、stable versionとして1.8.2が公開されていたので、
mainline versionからより新しいバージョンを取得します。

リポジトリの編集

$ sudo vim /etc/yum.repo.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/rhel/$releasever/$basearch/ # この行を変更
gpgcheck=0
enabled=1

nginxのアップデート

アップデート前にnginxを停止し、yum updateを実行します。

$ sudo yum service nginx stop
Stopping nginx:                                            [  OK  ]
$ sudo yum update nginx

バージョンの確認とnginx起動

特に問題が無ければmainline版のnginxがインストールされているので、
バージョン確認の後にnginxを起動しましょう。

$ nginx -v
nginx version: nginx/1.9.15
$ sudo service nginx start
Starting nginx:                                            [  OK  ]

Let's Encryptセットアップ

Let's Encryptのインストール

Let's Encryptのファイル自体はGitHubにて公開されているので、
任意のディレクトリに移動してgit cloneを行います。
今回は /usr/local にて作業を行いました。

$ git clone https://github.com/letsencrypt/letsencrypt

git cloneが完了したら"letsencrypt"ディレクトリに移動し、
パッケージインストールのコマンドを実行します。

$ cd letsencrypt/
$ ./letsencrypt-auto --help

Let's Encryptのクライアントを実行し、証明書取得

Let's Encryptでは証明書取得の手段が複数用意されていますが、
今回はwebrootプラグインを利用して更新を行います。

$ ./letsencrypt-auto certonly --webroot --webroot-path /var/www/html -d y4shiro.net

途中でメールアドレス入力と利用規約への同意を求められるので、適宜入力していきます。
証明書取得が完了すると、下記のようなファイルが作成されます。

$ sudo tree /etc/letsencrypt
/etc/letsencrypt
├── accounts
│   └── acme-v01.api.letsencrypt.org
│       └── directory
│           └── ********
│               ├── meta.json
│               ├── private_key.json
│               └── regr.json
├── archive
│   └── y4shiro.net
│       ├── cert1.pem
│       ├── chain1.pem
│       ├── fullchain1.pem
│       ├── privkey1.pem
├── csr
│   ├── 0000_csr-certbot.pem
├── keys
│   ├── 0000_key-certbot.pem
├── live
│   └── y4shiro.net
│       ├── cert.pem -> ../../archive/y4shiro.net/cert1.pem
│       ├── chain.pem -> ../../archive/y4shiro.net/chain1.pem
│       ├── fullchain.pem -> ../../archive/y4shiro.net/fullchain1.pem
│       └── privkey.pem -> ../../archive/y4shiro.net/privkey1.pem
└── renewal
    └── y4shiro.net.conf

/etc/letsencrypt/live/y4shiro.net に証明書が発行されます。

証明書自動取得

Let's Encryptで発行される証明書は期限が90日と短いので、 自動更新を行うよう設定します。
Crontabにて "毎月1日 00:00" の更新とnginxのreloadを設定しました。

$ sudo crontab -e
00 00 01 * * /usr/local/letsencrypt/letsencrypt-auto certonly --renew-by-default --webroot -w /var/www/html -d y4shiro.net && service nginx reload

nginxの設定

発行した証明書をnginxで読み込み、HTTPSとHTTP/2化を行うためにConfigファイルを編集しましょう。
HTTPSではポート443を使用するので、事前にiptableで開放しています。

Configファイル編集

qiita.com
上記記事を参考に、Configファイルの編集を行いました。

SSLv3.0に脆弱性が発見されているので、"ssl_protocols"、"ssl_ciphers"に関しては必ず設定を行って下さい。
"ssl_dhparam"(Perfect Forward Security)に関してはお好みで。

# redirect to 443
server {
    listen 80;
    server_name y4shiro.net;
    rewrite ^ https://$server_name$request_uri? permanent;
}

# server setting
server {
    listen 443 ssl http2;
    server_name y4shiro.net;

    access_log /var/log/nginx/y4shiro.net/access.log main;
    error_log /var/log/nginx/y4shiro.net/error.log;

    ssl_certificate /etc/letsencrypt/live/y4shiro.net/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/y4shiro.net/privkey.pem;
    ssl_session_timeout 5m;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets on;

    ssl_dhparam /etc/ssl/private/dhparam.pem

    ssl on;
    ssl_prefer_server_ciphers on;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers AESGCM:HIGH:!aNULL:!MD5;

    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/letsencrypt/live/y4shiro.net/fullchain.pem;
        resolver 8.8.8.8;

    add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains;';

    client_max_body_size 10M;

    location / {
        root /var/www/html;
        index index.html index.htm;
    }
}

https化の確認

nginxの再起動およびリロードを行ったのち、
Webページにアクセスしてhttps化されていることを確認してください。
以上です。

参考文献

Let's Encryptの証明書をnginxに設定してhttps化した | tsuchikazu blog 光の速さのWEBサーバー(nginx)をlet's encryptでSSL化及びHTTP/2化。ついでにセキュリティ評価をA+にする。 - Qiita

CentOSにnginxを導入

目次

はじめに

現在運用しているVPS(CentOS)では、WebサーバとしてApacheを稼働させていたのですが、
勉強も兼ねてnginxに置換してみることにしました。

環境

さくらVPS 1GB
CentOS 6.5
Apacheyumでインストール済み

sudo権限が不要な環境では適宜読み替えてください。
※2016年5月時点の内容なので、バージョン等の表記が古い可能性があります。

Apacheの停止・アンインストール

今回、Apacheとの共存はせずnginxへ完全移行するため、
Apacheの停止・アンインストールを行います。

Apacheの停止

$ sudo service httpd stop

サービス自動起動から削除

$ sudo chkconfig httpd off

Apacheのアンインストール

$ sudo yum remove httpd

yum経由でnginxインストール

リポジトリ登録

nginxはCentOSデフォルトのリポジトリに提供されていないため、
nginx公式のリポジトリを登録します。

$ sudo rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm

nginxインストール

$ sudo yum -y install nginx

バージョンを確認

$ nginx -v
nginx version: nginx/1.8.1

nginxを起動

$ nginx

もしくは

$ sudo service nginx start

Webページにアクセスし確認

動作確認のため、サーバのIPアドレスをブラウザに打ち込みアクセスします。
特に問題が無ければ"Welcome to nginx!"のページが表示されます。 f:id:ram1009:20160805021317p:plain

Webページ公開

元々Apacheで公開していたページをnginxでも公開するため、
nginx.confの内容を変更します。

Configファイル編集

yumでインストールした場合、特に指定をしなければ/etc/nginx/に各種ファイルが設置されます。

$ sudo vim /etc/nginx/nginx.conf

今回は下記項目を編集しました。
ポート変更を行った場合はファイアウォールのポート開放も忘れずに行いましょう。

server {
    listen 80; # ポートを指定
    server_name y4shiro.net; # サーバネームを指定

    access_log  /var/log/nginx/localhost.access.log;

    location / {
        root /var/www/html; # ルートディレクトリを指定
        index index.html index.htm;
    }
}

nginxの再起動もしくはConfigファイル再読み込みを行い、
指定したルートディレクトリの内容が表示されていることを確認してください。

$ sudo service nginx restart
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Stopping nginx:                                            [  OK  ]
Starting nginx:                                            [  OK  ]

もしくは

$ sudo service nginx
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Reloading nginx:                                           [  OK  ]

おわりに

今回はyumを利用してインストールを行ったため、特に問題もなくすんなりと進めることが出来ました。
Configの設定はほぼデフォルトの状態なので、気になる方は各位ググって設定を煮詰めましょう。
以上です。

GitHubのContributionsが反映されない

GitHubで草を生やしてモチベーションを向上させよう

これまではBitbucketでprivateリポジトリを立てて開発していたのですが、今後は開発状況を可視化させて行きたい、という理由で公開して問題ないコードは積極的にGitHubへ投げていく事にしました。
GitHubでは何らかの活動を行うとContributionsに反映されますが、これが結構なモチベーション向上へと繋がります。😄

PushしてもContributionsに反映されない…?

ある程度masterブランチで環境を整えたので、devブランチを作成してコミットを行っていたのですが、devブランチでの作業分がContributionsに反映されていないことに気がつきました。

Contributionsにカウントされる条件

Contributionsに関しては、GitHub公式のドキュメントが存在しています。
また、Qiitaにて言及された記事があったので引用させていだたきました。
Why are my contributions not showing up on my profile? - User Documentation qiita.com

  • Issueを投げる、PRを投げる
  • Commitする
    • commitの際に使用したemailアドレスがGitHubアカウントに登録したものと同じであること。
    • forkでなく、独立したリポジトリであること。
    • デフォルトブランチ(だいたいは master)か gh-pages ブランチへのコミットであること

まとめ

GitHubでContributionsを反映させたければ、デフォルトブランチに。コッミットしましょう

直近の目標

この辺りを達成できるよう気張らずに行きます!

このブログの方向性について

私と文章

生まれてきてこの方、日記を書いたり文章を創作することが本当に苦手で、メールを書くのに時間が掛かったり、ブログ・mixiなどのSNSにも殆ど文章を投稿することがありませんでした。
唯一、Twitterだけは雑なポストをしながらゆるゆると続けられている感じです。
アウトプット苦手人間なまま過ごしてきましたが、筆不精が足を引っ張り始めて良くない状態に遭遇するので、雑な文章を定期的に書く習慣をつけようと思います。

目標

現在の目標を簡潔に書くと

  1. 行った作業の備忘録
  2. その日得た学びを記述
  3. 購入した書籍や物などの雑感

といった内容を定期的に書いていけると良いなー。