AMIMOTO + SSL(Let’s Encrypt)= HTTP/2

negativespace
ネットショップ,ウェブサービスでのアカウント作成,さまざまなサイトへのログインなどで私たちは個人情報を用いています。
もしも個人情報が暗号化されていなかったら第三者に簡単に盗み見され盗まれてしまいます。このような事が起こらないよう SSL が存在します。SSL は暗号化技術を用い,利用者のブラウザとウェブサーバ間の通信を暗号化します。

特にオンラインストアなど(たとえばWooCommerce)を構築・運用する際,SSL の設定は大変重要です。

SSL 証明書とは

SSL (Secure Sockets Layer) 証明書はサイトの同一性を検証し,すべての情報を暗号化して通信します。これにより Web サーバとブラウザの間で通信されるデータは完全に秘匿されている事を保証されます。SSL は後に TLS (Transport Layer Security) と名前を変えますが SSL または TLS/SSL という名称で今でも広く知られています。

また,SSL 証明書は次のような重要なセキュリティ情報を含んでいます:

  • 企業名
  • 企業の所在地情報
  • 証明書の有効期限
  • 証明書の発行元・認証局に関する情報

※ Let’s Encrypt の場合,企業名や所在地情報は含まれません。

HTTPS との関連性およびサイトで SSL/TLS を使っているかの確認方法

HTTPS なアクセスを可能にするためには SSL デジタル証明書をサイトへインストールしなくてはいけません。
SSL 証明書のインストールされて HTTPS 通信が行われているサイトではブラウザのアドレス欄のHTTPS の文字が緑になって鍵のアイコンが表示されます。HTTP ではこういう事は起こりません。

encryption example
この鍵のアイコンをクリックする事でサイトの信憑性や信頼性について利用者が確認できます。確認しても安全でないと思えるならウィンドウやタブを閉じてサイトへのアクセスを終了しましょう。

SSL 証明書を取得し活用するメリット

  • 高い信頼性 – ユーザ登録や何かの支払いをする時に暗号化された接続かどうかを気にするでしょう。サイトが機密性の高いユーザ情報や有料会員制度を扱っているような場合は特に SSL 証明書を取得し,活用しているあなたのサイトでのユーザ登録や購入をするでしょう。
  • SEO – 2014年8月に Google はウェブサイトのセキュリティも検索結果の順位決定要素として取り入れる事を発表しました。SSL/TLS で保護されているサイトは保護されていないサイトと他の要因がすべて同じであった場合,セキュリティで保護されていないサイトよりも検索結果の順位においてより優位に経つ事になります。
  • HTTP/2 – HTTP/2 は HTTPS の利用を必須としており,サイトで HTTP/2 を採用することでページの読み込みを容易に高速化させ,サイトのパフォーマンスを爆発的に向上させることができます。すでに HTPS を利用されている場合は HTTP/2 への移行は簡単です。

SSL 証明書を使わないでいると……

  • セキュアでないあなたのサイトは買い物客からの信用を失います。
  • ハッカーが顧客のメールアドレス,ソーシャルメディアのアカウントや他の情報などを元に顧客の情報を入手することでしょう。
  •  機密性の高い個人情報や財務データをサーバから盗み出されます。
  • 上のいずれか(またはすべて)で引き越される財政面での多大な悪影響。

SSL 証明書の取得と設定方法

有料 v.s. 無料(Let’s Encrypt)

  • 有料の SSL 証明書

SSL 証明書は数多くのサードパーティから販売されており購入可能です。ドメインのリセラーであれば SSL オプションのサービスがあるでしょう。証明書には種類があるため購入の前にはよく考えてください。ベーシックな SSL 証明書は1つのドメインだけをサポートしており,1年単位の契約で価格はでだいたい$30から$50程度です。
複数のサブドメインをサポートする証明書はマルチドメイン証明書やワイルドカード証明書と呼ばれます。1年単位の契約で価格は$300程度です。

  • Let’s Encrypt

Let’s Encrypt はThe Internet Security Research Group (ISRG) から提供されている無料かつオープンソースな証明書のイニシアチブです。
ISRG は Mozilla,Facebook,Automattic などの大企業にサポートされています。まだベータ版のため不具合はあるかもしれませんが,誰もが無料でそして恒久的な SSL 証明書を設定でき,ショップのオーナーも SSL/TLS のサイトを構築・運用が可能です。

Let’s Encrypt の導入方法

  1. Route 53 などでドメインを取得し Elastic IP を設定します。
    https://amimoto-ami.com/2015/01/25/assigned-domain-route-53-setting-elastic-ip/

  2. WordPress Powered AMIMOTO (HTTP/2) AMI を起動します
    https://aws.amazon.com/marketplace/pp/B0178QFQBQ/

以下の手順で AWS コンソールで操作をしてください:
https://amimoto-ami.com/support/how-to-use/amazonconsole/
重要: ステップ19の “Associate the address to your instance” から進んでください。

  1. SSH を使ってサーバへアクセスしてください
    https://amimoto-ami.com/2012/12/18/amimoto-ssh/

  2. まずすべてのパケージを最新にしましょう:


$ sudo yum update
  1.  WordPress をインストールしましょう:

$ sudo /usr/local/bin/wp-setup example.com
  1. Let’s Encrypt で使う Python のバージョンをご確認ください:

$ python --version

※ Pythonのバージョンが 2.6 以前の場合は次のコマンドの実行して 2.7 へ切り替える作業をお願いします:


$ sudo alternatives --set python /usr/bin/python2.7
  1. Let’s Encrypt で使うツールなどをインストールします:

$  sudo yum install python27-pip python27-virtualenv augeas-libs dialog gcc libffi-devel  openssl-devel  system-rpm-config
  1. 準備が整いました。Let’s encrypt をインストールしましょう:

$ sudo virtualenv /opt/letsencrypt/
$ sudo /opt/letsencrypt/bin/pip install letsencrypt
  1. 証明書を生成しましょう:

$ sudo /opt/letsencrypt/bin/letsencrypt certonly -t -d example.com -a webroot --webroot-path=/var/www/vhosts/example.com/ --rsa-key-size 2048 --server https://acme-v01.api.letsencrypt.org/directory
  1. 証明書の更新連絡やキー紛失のリカバリ用にメールアドレスを登録してください

  2. nginx を SSL で動かす準備をします:


$  sudo cp /etc/nginx/conf.d/default-ssl.conf /etc/nginx/conf.d/example.com-ssl.conf
  1. 設定ファイル example.com-ssl.conf を編集します:

$  sudo vi /etc/nginx/conf.d/example.com-ssl.conf

変更内容は下の通りになります:


server {
listen 443 ssl http2;
server_name example.com;
root /var/www/vhosts/example.com;
index index.html index.htm;
charset utf-8;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers AESGCM:HIGH:!aNULL:!MD5;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

access_log /var/log/nginx/example.com.access.log main;
error_log /var/log/nginx/example.com.error.log;
  1. 追加でもう1つ設定を変えます:

$  sudo cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/example.conf
  1. コピーした example.conf を編集します:

$  sudo vi /etc/nginx/conf.d/example.com.conf

変更は下の通りになります:


server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
root /var/www/vhosts/example.com;
index index.html index.htm;
charset utf-8;

access_log /var/log/nginx/example.com.access.log main;
error_log /var/log/nginx/example.com.error.log;
  1. 変更した内容をサーバへ読み込ませます:

$  sudo service nginx restart
  1. ブラウザで設定したドメインへアクセスしてください。

  2. インスタンス ID を入力して WordPress の設定を完了させましょう。

instance_ID

最後に

Let’s Encrypt を使った SSL 証明書の取得や WordPress の設定をご紹介しました。オンラインをよりセキュアにすることのメリット,そして セキュアにする事により数々の恩恵の享受できるよう願ってやみません。

スライド