読者です 読者をやめる 読者になる 読者になる

れみゅーぶろぐ

某(元)高専生が多彩なジャンルにわたって書くブログ。非常に真面目なブログであると自負しております(要出典)。Twitter:@_remew_

nginx1.9.9 × Let's Encrypt × http2を試してSSL LabでA+判定までもらう

前回のあらすじ

前回、さくらVPSUbuntuをインストールしてssh接続できるところまで進みました。

今日書くこと

  • Ubuntuにおけるhttp2に対応したnginxのインストール方法
  • Let's Encryptの軽い紹介
  • Let's Encryptを使用したhttps対応方法
  • http2にする方法
  • SSL LabでA+評価を取る方法

http2とは

つよい

未来っぽい

(場合によっては)ページ表示が早くなる

詳しくはググってください。

Ubuntu × nginx1.9.9

http2に対応するためにUbuntuにnginx1.9.9をインストールします。

sudo apt-get install nginx

嘘です。

ちなみに、http2に対応するには1.9.5以上なら良いのですが、apt-getでインストールしたかったので、公式サイトの手順をおこなったら1.9.9がインストールされました。

remew@vps~$ wget http://nginx.org/keys/nginx_signing.key
remew@vps~$ sudo apt-key add nginx_signing.key
remew@vps~$ sudoedit /etc/apt/sources.list

このタイミングでnanoが起動してブチ切れましたがその話はまた今度書きます。

うまくvimを起動できたら、末尾に次の2行を追加します

deb http://nginx.org/packages/mainline/ubuntu trusty nginx
deb-src http://nginx.org/packages/mainline/ubuntu trusty nginx

ちなみに、「trusty」とある部分はUbuntuのバージョンによって変わります。
詳しくはこちら

次に、

remew@vps~$ sudo apt-get update
remew@vps~$ sudo apt-get install nginx

インストールができたら、nginx -vとかやってバージョンを確認します。今回はnginx version: nginx/1.9.9と表示されてそのあとの行にもずらずら表示されました。

じゃあ次はLet's Encryptのインストールをしたいのですが、その前にほんの少しだけ説明します。

Let's Encryptとは

Mozillaとかの有名企業が立ち上げた団体と、そこが作ったプログラムです。(あってる?)

これを使うと、これまで有料だったり、無料でも手間がかかったりしたようなhttpsへの対応がめっちゃ簡単にできるという凄いものです。

これであなたもセキュアなワールド・ワイド・ウェブに仲間入りです!

Let's Encryptのインストール

まずgitが必要ですのでインストールされているか確認してください。

gitがあれば、git clone https://github.com/letsencrypt/letsencryptソースコードを引っ張ってこれます。

remew@vps~$ git clone https://github.com/letsencrypt/letsencrypt
remew@vps~$ cd letsencrypt
remew@vps~/letsencrypt$ ./letsencrypt-auto -help

最後のコマンドを打ったあと、sudo時のパスワードを入力すると、apt-getやらが走って色々ダウンロードするらしいです。こわ。

そしてヘルプが表示されたりほげほげ。

次に、

remew@vps~/letsencrypt$ ./letsencrypt-auto certonly --webroot -d [httpsに対応させるドメイン] --webroot-path [nginxで設定したドキュメントルート]

というコマンドを打ちます。(httpsに対応させるサブドメイン複数ある場合は、-d [ドメイン1] -d [ドメイン2]といった感じで書きます。自分はwwwありなしの2つでやりました)

コマンドを打つと、次のような画面が出てきます。 f:id:Foolish_OkNCT:20160103012601p:plain メールアドレスを入力しろということなので入力して< OK >でエンターを押すと次の画面になります。利用規約に同意してねって感じ f:id:Foolish_OkNCT:20160103012703p:plain < Agree >でエンター。

そしたら・・・ f:id:Foolish_OkNCT:20160103013356p:plain ・・・?

次何をしたらいいの?

実は既に証明書の発行は済んでおり、(画像では隠してあるんですが)記述されたパスに証明書が配置されています!
ちなみに、証明書の期間は3ヶ月らしいです。更新を忘れると悲しいことになるので注意しましょう。

この証明書をnginxの設定で読めばOK, your web site will be https.

めっちゃ簡単すぎてびっくり。

あとでサブドメイン追加したいってなったときはさっきのコマンドをまた打って、打つときにサブドメインも書き足してやればいい感じです。

つまり最初「remew.net」だけhttps化するなら、

./letsencrypt certonly --webroot -d remew.net --webroot-path [ドキュメントルートのパス]

とコマンドを打ち、あとで「www.remew.net」もhttps化したいと思ったならば、

./letsencrypt certonly --webroot -d remew.net -d www.remew.net --webroot-path [ドキュ(ry

という感じです。

もう既に文章書くのがつらいし読む人もつらそうな分量になってきましたが、あともう少しで終わるのでもう少し頑張ってください。

httpsに対応させてSSL LabでA+評価を獲得する

てかSSL Labってなんだよって人はこちら

表示されたページに評価したいドメインを入力します。すると、そのドメインhttpsがどれだけセキュアかを判定してくれます。

そうです、単にhttpsにするだけではダメなんですね。nginxの設定を頑張らないといけません。

まぁこれは先人の知恵をお借りしました。

参考にしたのはこちらのページです。ぜひご覧ください。

まぁ概ね上のページの設定を真似てるんですが、いくつか違う点もあるので紹介します。

ssl_protocols

これ、nginx1.9.9だと何も設定しなくてもSSLv3以下を切ってくれるっぽいので特に何も書いてないです。

ssl_ciphers

こちらの「Modern compatibility」のセクションにある「Ciphersuite」をコピペしました。

Modern compatibilityだとTLSv1も切っているのですが、それだとIE10とかAndroid4.3以下がつらいので一応含めています。

せっかくなのでhttps関連のnginxのconfファイルを記述します。

server {
    listen 443 ssl;
    server_name remew.net default_server;

    ssl_certificate [ちょっと前に書いた証明書のパス];
    ssl_certificate_key [上の証明書と同じディレクトリにあるprivkey.pem];

    ssl_prefer_server_ciphers on;
    ssl_ciphers (略)

    ssl_session_timeout 10h;
    ssl_session_cache builtin:1000 shared:SSL:10m;
    ssl_dhparam [dhparamファイルのパス];

    add_header Strict-Transport-Securiy 'max-age=15724800; includeSubDomains;';

    [locationとか]
}

ちなみに、add_header (後略)の部分がないとA+にならないらしいですが、これがあるとhttpsじゃないと該当ドメインにアクセスできなくなります。

dhparamファイルはてきとうにsudo openssl dhparam 2048 -out [dhparamファイルの配置先]とかやれば作れます。作るのに数分かかります。

A+判定もらうのにハマったところ

www.remew.netからremew.netにリダイレクトする設定を書いていたのですが、wwwアリの方の設定もちゃんとやってなかったのでしばらくA+がもらえなくて悩んでいました。

ですが、両方共同じような設定にしてwwwの方だけリダイレクトにする設定をすることで、なんとかA+判定がもらえました!! f:id:Foolish_OkNCT:20160103015323p:plain ↑タブ開きまくりおじさんのA+判定記念写真

http2対応

これは楽です。というかhttps対応のついででもいいでしょう。

nginxのconfファイルにたった6文字追加します。

server {
-   listen 443 ssl;
+   listen 443 ssl http2;
    (以下略)

わーい、http2で通信できるようになったよ!

http2だとアドレスバーに青いイナズマが出てくる拡張機能を入れて自分のサイトを見てみました。 f:id:Foolish_OkNCT:20160103015653p:plain 文字がいい感じにボタンとかぶっててダサいですが、そこじゃなくてアドレスバーを見ましょう!青いイナズマが出ています!

見づらいですが、デベロッパツールのProtocolの部分もh2、つまりhttp2になっています!!!!!!最高!!!!!!!!!!!

これで、remew.nethttps化できてhttp2にも対応できました。

ちなみに、「http://remew.net」「http://www.remew.net」「https://www.remew.net」の3つとも「https://remew.net」にリダイレクトされます。次回はこの設定でも書きましょうかね・・・

感想羅列

  • Let's Encrypt神っぽい
  • SSL LabでA+判定もらうのめんどくさかった
  • ちょっと新しいことやってる感じがして楽しかった。
  • Let's Encryptめちゃくちゃ楽だし流行って欲しい。

感想

Let's Encryptは団体が設立された頃から目をつけていて、早く使えるようにならないかな〜と思っていたのですが、12月の頭にオープンベータとなり今回試すことができてよかったです。

今後、httpsは必須となっていくと思います。そんな中、こんなにも簡単にhttps用証明書が得られるLet's Encryptは非常に優れたサービスだと感じました。

正直言って個人で建ててるサイトをhttps化したところでって感じはありますが、この体験をみなさんに伝えることで「こんなに簡単なんだ!自分もやってみよう!」と思ってくれる人が現れたら嬉しいなぁという気持ちです(まぁ銀行サイトなど非常に高度なセキュリティを要するところには使うべきではないのですが)。

ちなみに、Let's EncryptはApacheだと設定ファイルも自動的に書いてくれるらしく、たしかnginxもそのうち対応されるはずなので将来的にはこの記事の一部は必要なくなるんじゃないかと思います。もしそうなれば、https対応はさらに楽になるのでLet's Encryptさんにはぜひとも頑張って欲しいです。

ここまで読んでくださった方、ありがとうございます。
めちゃくちゃ長い記事を書くのつらかったです。多分1ヶ月分の文章書いた気がする。お疲れ様でした。

あけましておめでとうございます

あけましておめでとうございます。

去年は色々つらい年でしたが、今年は良い年になるといいなぁ。

今年もよろしくお願いします。

さくらVPSにUbuntuをインストールした

はい

JavascriptのServiceWorkerつよそう

https必須

http2つよそう

https必須

https欲しい

最近Let's Encrypt(https://letsencrypt.org)とかが話題になっている

ので試したいな〜と思いました

その前段階として、なんだか情報も多そうなので(主観)VPSのOSをUbuntuに変えました。

OSのインストール

カスタムOSインストールガイド - Ubuntu 12.04/14.04|さくらインターネット公式サポートサイト
↑を参考にしました。公式サポートがあるのは嬉しいですね。

特に問題はありませんでした。

OSを入れてからやったこと

sshの公開鍵を投げる

remew@local:~$ scp [事前に作成した公開鍵] [VPSのIPアドレス]:~/autholized_keys

sshで繋ぐ

remew@local:~$ ssh [VPSのアドレス]
インストール時に設定したパスワードを入力してログイン

upgrade, update

remew@vps:~$ sudo apt-get upgrade
remew@vps:~$ sudo apt-get update

sshの設定

まぁ必須ですよね。
remew@vps:~$ sudo vi /etc/ssh/sshd_config

#Port 22
Port [てきとうなポート]
~中略~
#PermitRootLogin without-password
PermimtRootLogin no
~中略~
AuthorizedKeysFile %h/ssh/authorized_keys #コメントを外す
~中略~
#PasswordAuthentication yes
PasswordAuthentication no
remew@vps:~$ mkdir .ssh
remew@vps:~$ chmod 700 .ssh
remew@vps:~$ mv autholized_keys .ssh/
remew@vps:~$ chmod 600 .ssh/autholized_keys
remew@vps:~$ sudo service ssh restart

sshで接続

勘の良い方ならお気づきかもしれませんが、authorized_keysとすべきところをautholized_keysと書いてしまい、接続に失敗しました。

なおしたら接続できました。

vimを使わなかった理由

vimは非常に重要なエディタなのになぜインストールせずにviを使ったのか書いておくと、今回セットアップをできるだけ短時間で済ませたかったな〜という気持ちがあったからです。

ちなみに所要時間を測ってなかったので完全に無意味でした。
多分1時間前後じゃないですかね。

次回予告

次はhttp2に対応したnginxをインストールして問題もなく、さらに余力があればletsencryptのインストール(+node.js(関係ないけど))まで済ませて書きたいです。

Javascriptでクワイン

今日ふと思ってJavascriptクワインやろうと思いました。

そしたらすごく簡単だった。

クワインとは

クワイン (プログラミング) - Wikipedia

つまり、ソースコードと同じ文字列を出力するプログラムのことです。

ソースコード

(function quine() {
    console.log('(' + quine.toString() + ')();');
})();

これだけです。ウケる。

実行すると、ちゃんと上のソースコードと同じ文字列が出力されます。

Javascriptサイコー

口内炎ができた

上唇の裏側。つらい

口内炎一瞬で治る薬が欲しい

てか最近暑くない?今日25度くらいあったらしいのでめっちゃ暑いし沖縄はもう冬が終わって夏になったのかもしれない。

Ubuntuにして約1ヶ月経ちました

 

この記事はICT Advent Calendar 2015とは関係ありませんがぜひ見ていってください。

 

1ヶ月前

WindowsOSが吹っ飛びました。

というのも、Ubuntuデュアルブートしようとしたんですが、失敗してパーティション情報が死にました。

ファイルがだいぶ消え、激萎えしました。復旧も全然できなくて、マジつら1000%萎えって感じ。

せっかくなのでUbuntu一本化してみることにしました。

 

数日後

ぼく(過激派)「開発するのに便利じゃん。Windowsはクソ」

 

さらに数日後

ぼく(穏健派)「Javascriptたのしい。Babelたのしい。」

 

最近

ぼく(過激派)「なんだ、Ubuntuにして困ったことないぞ。こんなことならもっと早めに変えておけばよかった。Office製品も好きじゃないしアンチMSになりそう。」

 

ここまではよかった。

 

一昨日くらい

ぼく(一般人)「一般人なのでMinecraftがしたい。一般人なのでGregでマルチプレイしたい。」

ぼく(一般人)「サーバー起動できたし友達とあそぼ(詳しくはhttp://minecraft.remew.net)」

 

ぼく(スティーブ)「Nihongo ga utenai」

 

ぼく「IntellInputとか入れればええやろw」

「??? Windowsだけ???」

「つらい」

「Nihongo ga utenai」

 

調べた

 

LinuxのMinecraftで日本語入力を実装する · GitHub

お!!!!

 

読んだ

 

は?????????????????

87行目:XSetLocaleModifiers ("@im=none");
ぴょまえに委託するインプットメソッドは無え!!
ということです えぇ

は???????????????????????????????????

 

LWJGL氏〜w何をしてるでござるか〜w

頼む〜w

頼む

 

頼む!!!!!!!!!!

 

NIHONGO GA UTENAI

SEKAI NO OWARI

 

つらい 

 

つらい

 

おのれGreg

 

Greg関係ないやろいい加減にしろ!

Gregかわいい

 

日本語が打てないMinecraftとかもうダメ。

 

まとめ

  • Ubuntuにしても全く問題はない(ただしMinecraftではつらい)
  • というわけでみなさんUbuntuにしましょう

 

本当のまとめ

  • Ubuntuは開発機としては素晴らしく便利
  • だけどやっぱりゲームはWindowsの方がええんやなぁ…
  • 誰かLinux上のMinecraftでも日本語入力できるMod作ってください
  • ちなみに沖縄のセミはもう鳴いてません

つらい1年だった

まえがき

この記事はICT Advent Calendar 2015の2日目の記事です。

 

1日目の委員長様の記事と比べると個人的な話が多くなると思いますうぇいそいや。

 

本編

2015年はタイトルの通りつらい1年でした、マジでつらかった。

何がつらかったかって言うと

  • 1月、成績がやばい。留年しそう
  • 2月、成績がやばい。留年しそう
  • 3月、成績がやばかった、留年した。ついでに休学した。
  • 4月、休学して晴れ晴れした気持ちになった
  • 5月、親がバイトをしろと強く言うようになってつらみ→∞
  • 6月、バイト楽しいぃ〜〜w
  • 7月、この辺からよく覚えていない
  • 9月くらい、新しいバイト(IT系)をおりさの先輩に紹介してもらった
  • 10月、新しいバイトが思ったより社畜だったけど楽しい
  • 11月、高専祭たのしかった
  • 12月、いまここ

つらかった。。。

上は個人的なつらみですが、ICT関連でも結構つらみありました。

  1. 1年生と接することが難しくてつらい
  2. プロコンでは多少貢献できたと思うけど、PCKでは後輩と先輩の頑張りを見ていることしかできなかった感じのつらみ
  3. ICTLT参加できない
  4. 後輩や先輩、同級生ともっと接したかった

特に2番目がつらくて、というのも去年のプロコンがめちゃくちゃ恥ずかしい結果だったので、その罪滅ぼし的な感じで出来る限り貢献していきたいなぁと思っていたんですが、バイトとかの関係もあって、結構中途半端な感じになってしまったのが悔しいというか悲しいというか。

(メディアに入ってたらな〜とか考えたこともありましたが自分の場合メディアに入ってもなんだかんだ留年してそうでアレ。)

 

来年と来年度

さて、結構愚痴っぽい文章でしたが、来年について考えましょう。

まだ今年は終わってませんが、残り1ヶ月切ってるので誤差です(?)

今のバイトは結構楽しく、しかも幸か不幸かプログラマとしてそこそこ戦力として見られているらしく、辞められなさそう。(辞めようと思ってはいないけど)

というわけで年が明けても今のバイトを続けている予定です。ICTのみなさんと会える機会が少ないのは残念ですが、休学してるししょうがない。つらいけど。つらい

来年度については、どうなるんでしょうね。自分でもよくわからないです。

 

最後に

  • ICTのみんなにめっちゃ会いたい
  • ICT委員会大好き
  • なのでこれからも頑張って欲しい
  • 汐新委員長(予定)の成長に期待
  • 他のみんなに負けないように僕も技術を磨いていくぞっ
  • 半分くらい部外者っぽいですが頼れる時は頼って欲しいな〜とか言っちゃったり
  • まだ言いたいことはあるけどこれ以上続けたら歯止めが効かなくなって、
  • 本文より長くなりそうなのでこれで終わりましょう。

 

最後の最後に

つらい1年でしたが、楽しいこともたくさんある1年でした。

今年関わったみなさん、ありがとうございました。

来年も関わるかもしれないみなさん、よろしくお願いします。