HimaJyunこのブログ、つい最近(秘密裏に)サーバのアップデートを実行し、HTTP2を利用したかったため、SSLに対応させました。その際、せっかくなのでRSAより負荷が少ない(と言われる)ECDSA(ECC:楕円曲線暗号)を採用してみる事にしました。同様の投稿は2,3件ほど見受けられますが、最新のコマンドと微妙に引数が合わなかったりしたので、スクリプトと合わせて紹介しようと思います。ECDSAこのページをご覧になっている時点で、ECDSAがどうこう、暗号化どうこうと言うのは理解しているかと思われます。Encryptはいつの間にやら正式版となって、しかもECDSAの鍵が発行して頂けると言うではありませんか......ただ、現状発行されるのはRSA2048bit(s)、ECDSAは面倒な手順を踏まないと行けない様なので、頑張って解説してみます。鍵は/etc/letsencrypt/ecdsa/以下に置いて行くとします。(普通にやった時の挙動を真似て、/etc/letsencrypt/ecdsa/archiveに作成して/etc/letsencrypt/ecdsa/liveにシンボリックを張るとします。Encrypt)をインストールするletsencrypt-autoは僕の知らない間に「certbot-auto」と言う物に変貌を遂げています。言う事で、Certbotをインストールします、今回は後からスクリプトで自動更新する事も考えて「/usr/local/bin/」にインストールします。Requestの事らしいです、要は「俺はスーパーサ○ヤ人のベ○ータ様だ!!署名しやがれクソッタレ!!」ってなファイルです。/tmp/lets_ecdsa"/CN=example.com"の所、example.comを自分のドメインにして実行しましょう(例:jyn.jp)subjectAltName=DNS:example.comの所も同じです、この時、SANとしてサブドメインとかを複数指定する事でマルチドメインに対応した証明書を発行する事が出来ます。ドメイン.example.com」を指定しましょう。証明書の取得が上手く行くとカレントディレクトリに以下の3つのファイルが作成されます。0000_cert.pem(サーバ証明書)0000_chain.pem(中間証明書)0001_chain.pem(サーバ証明書と中間証明書が1つになったモノ)それぞれ分かりやすい名前にリネームしておきましょうか。privkey1.pem普通に取得した時の挙動も真似てliveディレクトリにシンボリックリンクを張っておきましょう。/etc/letsencrypt/ecdsa/live/privkey.pemサーバの設定さて、さっそく作成した鍵ファイルを利用してApacheやnginxをセットアップしてみましょう。細かい暗号化の設定は別として、鍵ファイル周りをご紹介します。nginx鍵ファイルの設定は以下の様になります。/etc/letsencrypt/ecdsa/live/fullchain.pem;鍵ファイルがSANとして複数のドメインに対応している場合は全てのサーバの設定に同じファイルを指定すればよろしApache(2.4.8~)Apacheはバージョンが2.4.8以上か否かで設定が変わってきます。/etc/letsencrypt/ecdsa/live/privkey.pemApache(~2.4.8)バージョンが2.4.8未満の場合は以下の様に設定します。/etc/letsencrypt/ecdsa/live/chain.pem暗号スイートの選択みなさんの迷い所、ssl_ciphersです。人によっては凄く色々と羅列して悦に浸っているかも知れませんが、長ったらしく説明する意味はありません。(と言うかMozzilaのジェネレータがそう言う奴を吐き出す)ECDSAで使える暗号スイートは少しだけです、他は指定しても無意味になります。ECDHE-ECDSA-AES256-GCM-SHA384ECDHE-ECDSA-AES256-SHA384ECDHE-ECDSA-AES128-GCM-SHA256ECDHE-ECDSA-AES128-SHA256ECDHE-ECDSA-AES256-SHAECDHE-ECDSA-AES128-SHAしかも、これらは「HIGH」を指定する事で自動的に暗号に128bit以上を使う物を指定します、すなわち上に上げた6つも含まれます。言うより「HIGH」指定の方が良いらしいです、「HIGH」指定を利用すると新しい暗号スイートが利用出来る様になった、脆弱性がある暗号スイートが推奨されなくなった時に自動的に(opensslなどのバージョンアップなどによって)選択される物が変わります。(出展:どこかのQiitaのコメントでみかけた情報だけどどこだか忘れた......)と言う訳で、僕は以下の様に設定してみました。'AESGCM:HIGH:!aNULL:!eNull:!EXPORT:!DES:!3DES:!MD5:!DSS:!RC4:!PSK';とっても短くて良いですね!!(こんなに色々除外する物を設定する必要はないかもですが)「AESGCM:HIGH」としてAESGCMの優先度を上げているのは、こうしないとHTTP/2利用時にFireFoxなどでネゴシエーションに失敗するためです。先程ご紹介したECDSAの鍵ファイルを作成するコマンドをまとめてスクリプトにしてみました。完全に確認している訳では無いので実行結果とかは/dev/nullに捨てずにメール送信した方が良いかもしれません。-e」でrootのcrontabとして実行して下さい。2.4系でHTTP/2対応サーバを構築してみるテスト。とあるサーバエンジニアの備忘録ssl_prefer_server_ciphersを有効にしたらERR_SPDY_INADEQUATE_TRANSPORT_SECURITYが出るようになった。【systemd】StandardOutput=fileはログをファイルに出力できるけど追記されないsystemdで作ったserviceのログ(標準出力)をファイルに出力したい!み......続きを読む→[Bukkit/Spigot]ウィザー/エンドラの召喚を制限するプラグイン作ったどうも、AMiTサーバのナカノヒトです。ご存知無いでしょうが、Bukkitプラ......続きを読む→jpドメインをお名前.comからJPDirectに移管した新年ですが新年っぽい記事など書けないので普通の記事を書きます。PiにMuninをぶち込んで4鯖を監視させてる@HimaJy......続きを読む→PREV[Raspbian]ユーザ名変更の個人的に「正しい」と思うやり方NEXT[東方]紅妖永花文萃をWindows10対応にする手法ナカのヒト:HimaJyun​散って美しいのは桜だけです、情報はまとまっていた方が美しいのです。