先日、さくらのVPSを借りて、Goで書いたWebアプリを公開してみたのですが、
Goといえば、httpsから始まるURLを開くだけでHTTP/2になるという超素敵な仕様があり、
(GoでHTTP/2が標準実装になったのはバージョン1.6からです)
是非ともHTTP/2で運営してみたいということで、
ちょうど先日正式公開となったMozillaのLet's Encryptを利用してみた。
Let's Encrypt - Free SSL/TLS Certificates
院生の頃から、Mozillaとはなにかとお世話になっており、
今回もMozillaさまさまだわ。
で、設定はというと
端末を開き、サーバにログインして下記のコマンドを打った。
(Gitのインストールは必須です。)
(ドメイン名にはhttpsで開きたいサイトのドメインを入力する:今回はsoil2.net)
sudo apt-get update sudo apt-get upgrade #optディレクトリにLet's Encryptを配置 cd /opt sudo git clone https://github.com/letsencrypt/letsencrypt #アプリのプロセスがある場合はkillしておく。下記のコマンドでプロセスを調べる ps -ef kill -KILL プロセスID cd letsencrypt ./letsencrypt-auto certonly -a standalone -d ドメイン名
メールアドレスの入力画面が表示されるので、メールアドレスを登録し、
利用規約にAgreeすると
#下記が表示されたら終了 IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/ドメイン名/fullchain.pem. Your cert will expire on 期限. To obtain a new version of the certificate in the future, simply run Let's Encrypt again.
こんな画面が表示されて終了です。
有効期限には気をつけてください。
各種証明書は下記のパスにありました
#下記のパスが証明書の実体 N.pemのNには整数が入ります サーバ証明書(公開鍵) /etc/letsencrypt/archive/ドメイン名/certN.pem 中間証明書 /etc/letsencrypt/archive/ドメイン名/chainN.pem サーバ証明書と中間証明書が結合されたファイル /etc/letsencrypt/archive/ドメイン名/fullchainN.pem 秘密鍵 /etc/letsencrypt/archive/ドメイン名/privkeyN.pem
同時に各証明書に対してシンボリックリンクも張られていました。
#下記のパスに証明書類のシンボリックリンクが生成されている サーバ証明書(公開鍵) /etc/letsencrypt/live/ドメイン名/cert.pem 中間証明書 /etc/letsencrypt/live/ドメイン名/chain.pem サーバ証明書と中間証明書が結合されたファイル /etc/letsencrypt/live/ドメイン名/fullchain.pem 秘密鍵 /etc/letsencrypt/live/ドメイン名/privkey.pem
証明書ができたら、Goのコードの方に証明書のパスを入れます。
httpで開いているコードが
func main() { //ハンドラ周りのコードは省略 if err := http.ListenAndServe(":80", nil); err != nil { log.Fatal("ListenAndServe:", err) } }
だとすると、
httpsで開きたい場合は
func main() { //ハンドラ周りのコードは省略 crtPath = "/etc/letsencrypt/live/ドメイン名/fullchain.pem"; keyPath = "/etc/letsencrypt/live/ドメイン名/privkey.pem"; if err := http.ListenAndServeTLS(":443", crtPath, keyPath, nil); err != nil { log.Fatal("ListenAndServe:", err) } }
メソッド名の変更と、各証明書のパスを指定すればOKです。
ここで注意するのは、サーバ証明書(crt)の指定は、
サーバ証明書単体ではなく、中間証明書が結合されているものを指定します。
そうでないと権限エラーでサイトが開きません。
ここまで出来たらコンパイルしてサーバを立ち上げみます。
アドレスバーに鍵マークが付き、
セキュリティの認証局がLet's Encryptになりました。
プロトコルはどうなっているかを調べてみると、
バージョンのところがHTTP/2.0になってた!
これでファイルが並行送信できる様になったぞ。