ウェブサーバをOpenSSL 1.1.1でTLSv1.3に対応させる

2018年9月11日にようやくOpenSSL 1.1.1がリリースされた。これでOpenSSLでもTLSv1.3に正式に対応となる。
がとらぼの人は基本的にFreeBSDのportsが対応しないと動かないのでOpenSSL 1.1.1が早くportsにならないかなと思っていたら翌日には対応portsが出た。
事前にはOpenSSL 1.1.1がリリースされたら security/openssl か security/openssl-devel のどちらかになるのかなと思っていたのだが security/openssl111 という変なオリジンになった。これは今後1.1.1以降が出たらマズくない?臨時なのかしら?

2020年1月19日追記:
2020年1月1日にOpenSSL 1.1系のportsがsecurity/openssl111からsecurity/opensslに変更された。以下、この記事でsecurity/opessl111の部分はsecurity/opensslに読み替えて下さい。

インストール

すでにSSL/TLS系の暗号ライブラリを使用していなくてOpenSSLを新規インストールする場合
# パッケージでインストール
# pkg update  パッケージ情報の更新
# pkg install security/openssl111
または
# portsでインストール
# portsnap fetch update && portsdb -uU   portsの情報更新
# cd /usr/ports/security/openssl111
# make install
/etc/make.conf (追記1行)
DEFAULT_VERSIONS+=ssl=openssl111

既にOpenSSLを使っている、または他の暗号化ライブラリを使用している場合は以下(portsで)

/etc/make.conf
1
2
3
4
5
6
7
8
#コメント化または行削除
#DEFAULT_VERSIONS+=ssl=libressl       利用中がlibresslなら
#DEFAULT_VERSIONS+=ssl=libressl-devel 利用中がlibressl-develなら
#DEFAULT_VERSIONS+=ssl=openssl        利用中がsecurity/opensslなら
#DEFAULT_VERSIONS+=ssl=openssl-devel  利用中がsecurity/openssl-develなら

#追加1行
DEFAULT_VERSIONS+=ssl=openssl111

↓でportsのオリジン替えを行うので↑の/etc/make.confの変更を先に行っておく(重要)。

# portsnap fetch update && portsdb -uU   portsの情報更新
# portupgrade -f -o security/openssl111 security/openssl-devel     オリジン変更を伴う入れ替え
# portupgrade -fr openssl111   暗号化ライブラリに依存するportsを再ビルド

再ビルドしたportsを使用するサービスの全てを再起動する。または対象サービスが多くて面倒ならシステム再起動。

Nginxの設定変更

Nginxの設定ファイル (変更箇所のみ)
1
2
3
4
5
6
7
ssl_protocols   TLSv1.3 TLSv1.2;  #TLSv1.1, TLSv1.0はもうありえないよね
ssl_prefer_server_ciphers       on;       #これは既にある筈(そのまま)
ssl_ciphers     'TLS13:EECDH+CHACHA20:EECDH+AESGCM:ECDHE:!COMPLEMENTOFDEFAULT';
ssl_ecdh_curve     X25519:prime256v1;

# 参考 https://www.openssl.org/blog/blog/2018/02/08/tlsv1.3/        
# ssl_ciphers  'TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-256-GCM-SHA384:ECDHE:!COMPLEMENTOFDEFAULT';

試してみた限りではTLSv1.3の暗号スイートはTLS13-AES-256-GCM-SHA384しか使われなかった。なのでTLSv1.3の順序指定は現状では無意味かなと思う。(今後は変わるだろうけど)
そこでTLSv1.3についてはTLS13だけを指定した。なお、OpenSSL 1.1.1を利用するNginxではTLS13の指定の有無に関わらずTLSv1.3が最優先で使用されるようなのでTLS13の指定自体不要かもしれない。
次にEECDH+CHACHA20を指定したのはTLSv1.3が使われずTLSv1.2の場合に再優先でChaCha20-Poly1305を使いたかったから。次に:EECDH+AESGCM:を優先した上で少し古めのブラウザとの互換性のためにECHDEを指定。最後に !COMPLEMENTOFDEFAULT で幾つかの余計なの(DEFAULT外)が外れる。

試行錯誤用 (例)
% openssl ciphers -s -v ECDHE:\!COMPLEMENTOFDEFAULT

ssl_ciphersで指定する暗号スイートを気に入る状態になるまで試すのが良いかと。なお、コマンド打ちでは除外の ! の直前に \ を付けること。

Nginxの設定確認と再起動
# nginx -t               設定の簡易チェック
または
# service nginx configtest

# service nginx restart  Nginx再起動

確認

まずはOpenssl 1.1.1をインストールした端末からコマンドで確認してみる。
% openssl s_client -connect www.example.com:443         プロトコルを指定しないで接続
% openssl s_client -tls1_3 -connect www.example.com:443  TLSv1.3を指定して接続
% openssl s_client -tls1_2 -connect www.example.com:443  TLSv1.2を指定して接続

ブラウザで確認する。

Chromeブラウザで確認 1
Chrome Dev版でTLSv1.3に対応させた「がとらぼ」を表示して[F12]でDevToolsを出した。(または右上のメニューボタン→その他のツール→デベロッパーツール or [Ctrl]+[Shift]+[i])
DevTools上部のタブから[Security]を選択。
TLSv1.3対応前と変わらずTLSv1.2で接続されている。
盛大に勘違いしていたのだが、ChromeのDev版,Canary版はバージョンがChrome71なので標準でTLSv1.3に対応しているのかと思っていた。それが大間違い。
ブラウザでの確認にChromeのDev, Canaryを設定触らずに使ったため、最初はTLSv1.3で全く接続できず頭の上にクエスチョンマークが3つくらい浮かんだ状態で暫く悩まされた。

Chromeブラウザで確認 2
ChromeのURL入力欄に chrome://flags/#tls13-variant を入力。
TLS1.3という項目が表示されるので、右の[Default] をクリック。
プルダウンメニューから[Enabled (Final)]を選択する。

Chromeブラウザで確認 3
念の為にボタンの表示が[Enabled (Final)]になっていることを確認。
右下の[RELAUNCH NOW]をでクリック。(ブラウザが再起動する)

Chromeブラウザで確認 4
TLSv1.3に対応させたサイトを再表示。DevToolsを出す。
DevTools上部のタブから[Security]を選択。
オリジンの混在するページの場合は左列のMain originで目的のウェブサイトのホスト名を選択。
右列の表示が変わり、プロトコルがTLS1.3、鍵交換グループがX25519、暗号スイートがAES_256_GCMになっている。 期待どおりなのでChromeでの確認は完了。

Firefoxブラウザで確認 1
FirefoxのDeveloper版でTLSv1.3に対応させた「がとらぼ」を表示した。
URL入力欄左の鍵アイコンをクリック。
ポップアップした窓の1行目の右端にある[ > ]をクリック。

Firefoxブラウザで確認 2
一番下の「詳細を表示」をクリック。

Firefoxブラウザで確認 3
上の画像の赤枠部分のように暗号スイートと鍵長とプロトコルが表示される。期待通りなのでFirefoxでの確認は完了。

最初にFirefox(の開発版)で確認すれば悩まずに済んだのね。

途中で触れたが、OpenSSL 1.1.1を利用するNginxでは暗号スイートの指定の有無に関わらずTLS13-AES-256-GCM-SHA384が使用される。(クライアント側がTLSv1.3の正式版に対応していたらだけど。)
それだけでなく、OpenSSL 1.1.1を利用するNginxでは ssl_protocols の指定にTLSv1.3を追記していないバーチャルホストであってもTLSv1.3が有効になるみたい。これは勝手な動作なのでちょっと困りモノ。Nginx側でそのうち直るかもだけど。

TLSv1.3はまだこれからなのでクライアント・サーバの両側ともにすぐに使えるという感じではないようだけど、どれくらいでTLSv1.3が当たり前の世の中になるかしら?

ちなみにSSL/TLSのテストサイトとして有名なQualysのSSL Server Testは2018年9月18日の時点でTLSv1.3のドラフト28までの対応なのでTLSv1.3の正式版は対応しておらず、テストしてもTLSv1.2までの表示となります。これからウェブサーバーをTLSv1.3の正式版に対応にさせようという人は勘違いなく。正しく設定できていてもテストするとTLSv1.2としか表示されないので「あれ?」ってなる。

Qualys Server Testで確認 3
2018年9月28日追記:
10日前にはドラフト28までの対応だったQualysのSSL Server TestがRFC8446対応になったみたい。
TLSv1.3対応の「がとらぼ」をテストしたところ、上の画像のように正しく評価して貰えた。

PoEで電源供給したい

以前からPoE対応の機器を持っていながら自宅ではPoEで電源供給をしたことがない。昔は高かったから最初から諦めてたんだけど、今はまるで状況が違う。何か買ってみたいかなと思って探してみた。例によってAliExpressね。

PoE対応L2SW

TuoTaiDa TTD-4POE/G-S

TuoTaiDa TTD-4POE/G-S
閲覧時の販売価格がUS$52.83と少しお高い印象。
アップリンク込みで5ポートのL2SWでPoEで給電できるのは4ポート。付属ACアダプタのPoEへの電源供給力は入力AC220VでDC48V 2Aの120W???とのこと。日本の一般家庭の100V環境で使えるのかしら?
ACアダプタの電源ケーブル接続部は3Pソケット(IEC 60320-C13)のメスになっているので付属のケーブルのコンセント側プラグが日本のコンセントに合わなければどこのご家庭にも余ってるケーブルを使えば良さ気。
10/100/1000Mbps対応

SSC-SPOE108

SSC-SPOE108
閲覧時の販売価格がUS$23.68とかなり安いがタイムセールで26%引きになっているので通常はもう少し高いのかな。
8ポートのL2SWで10/100Mbps対応。PoEで給電できるのは6ポート。付属ACアダプタのPoEへの電源供給力は110Vで65Wとのことなので接続機器の消費電力はMax50W程度で予定しておくのが無難かな。1ポートあたり8W程度になるので家庭レベルならまぁ十分なんじゃないでしょうか。ただ、見た目が安っぽすぎるのが難点。ACアダプタの電源ケーブル接続部は3Pソケット(IEC 60320-C13)のメスになっているので付属のケーブルのコンセント側プラグが日本のコンセントに合わなければどこのご家庭にも余ってるケーブルを使えば良さ気。

SSC-POE112

SSC-POE112
閲覧時の販売価格がUS$39.99だが、タイムセールで7%引きになっているので通常はもう少し高いのかな。
12ポートのL2SWで10/100Mbps対応。PoEで給電できるのは10ポート。AC220-240Vで150Wということになっているので日本の100V環境では使えないのかしら?
それよりも、上の画像のようにビルトインパワーだと書いてあって電源部にIEC 60320-C13のソケットも見えているのに、本体背面画像を見るとDC INと書いてあってACアダプタを接続するポートしか見えない。この製品はあまりに謎すぎるので買わない方が無難かな。

GXCOM TS6216P-2G-1F

GXCOM TS6216P-2G-1F
16ポートのL2SWで10/100Mbps対応がPoE対応。アップリンク用?の2ポートが1000Mbps対応。他にSFP光ポートが1つ付いているらしい。本当ならなかなか豪華。
背面は電源スイッチと3Pソケット(IEC 60320-C13)のメスとアース、冷却ファンが2つ(あるように見える)。
PoEの出力は15.4W/30W IEEE802.3af/atとなっているのでポートあたりそれぞれの規格の最大電力供給できる筈。
ただし、PoEは全部で250Wまでとのことなので802.3afなら全ポートで最大の15.4Wを使える計算になるが802.3atでは全然足りないので約半分のポートを塞がないとポートあたりの最大電力を使えないことになる。まぁ普通はそんな電力食う機械を大量につながないだろうけど。
19インチラックマウントの1Uタイプでマウント用金具が付く。本体の幅は19インチより短くてマウント金具で届かせるタイプ。
実質剛健で凄くまともそうに見えるんだけど、見た目を裏切ってくれるのが中華のクオリティなのであまり信頼はしないで買って試してみるのが良さそう。

PoEインジェクタ・スプリッタ

ノーブランドPoEインジェクタ・スプリッタ

ノーブランドPoEインジェクタ・スプリッタ
閲覧時の販売価格がUS$1.20だが、タイムセールで10%引きになっているので通常はもう少し高いのかな。
インジェクタ兼スプリッタらしいが、素通しのようなのでそうなんでしょう。インジェクタとして使用する場合は48V対応のACアダプタなどが別途必要なので実質スプリッタ専用だと思っておいた方が良い。
電源コネクタは5.5x2.1mm

Cdycam POE70

Cdycam POE70
閲覧時の価格がUS$0.93-1.86でタイムセールで25%引きになっているので通常はもう少し高いのかな。
こちらもスプリッタだが素通しタイプなので非常に安い。2つ入っていて1本はインジェクタ、もう一方がスプリッタという扱い。電源のコネクタはそれぞれオスとメスになっている。素通しだからどうでも良いと思うんだけど。おそらくPoEのSWを使わないの前提という商品っぽい。
電源コネクタは5.5x2.1mm

PoEスプリッタ

Cdycam POE4812

Cdycam POE4812
閲覧時の価格がUS$6.29-8.99でタイムセールで10%引きになっているので通常はもう少し高いのかな。
こちらはスプリッタなのでLANケーブルを通じて送られてきた電源だけ別に取り出す用。PoE非対応の監視カメラなどを接続する際に使用する。
一応リップルフィルタも付いてるよというのがウリらしい。
電源コネクタは5.5x2.1mm

ノーブランド KAT-P21

ノーブランド KAT-P21
閲覧時の販売価格がUS$8.00。
屋外用の防雨暴風ケースに入ったスプリッタ。屋外にPoE非対応の監視カメラを付ける場合に使用する。
IEEE802.3af/at対応
10/100Mbps対応
電源 Input: 37-57V, DC output: 12V/2A
本体の外蓋に簡体字で「安防专用」(セキュリティ専用?)と大きく書いてある(樹脂の凹凸)ので凄くかっこ悪いのが注意点。

PoEインジェクタ

ノーブランドPoEインジェクタ

ノーブランドPoEインジェクタ
閲覧時の販売価格がUS$2.99 - 4.99。購入時はプラグの形状を選択する。日本の家庭用コンセントの形状ならUS Plugを選択。選択を間違えて購入すると当然コンセントが刺さらないということになる。
PoE給電付きのSWを持ってないという場合に家庭用コンセントに挿してPoE電源を供給するインジェクタ。上の画像のPOEと書かれている側が給電される。
Input: 100-240V 50/60Hz
Output: 48V-0.5A

zhangqing ZQPOEGI008-48V 60W

zhangqing ZQPOEGI008-48V 60W
閲覧時の販売価格がUS$39.00でタイムセールで17%引きになっているので普通はもう少し高い。日本への送料は無料。
8ポートのPoEインジェクタ。電源アダプタ付き。
8ポートで供給が最大60Wなので単純に割ると7.5Wとなり規格(IEEE802.3af)の数値の半分しかないわけではあるが、実際には省電力の機器が多いだろうから全部のポートが埋まっても少し余裕くらい(ポートあたり5W以下だと焦るけど)。
IEEE802.3af/at対応
10/100/1000Mbps対応 、ギガビット対応のが欲しいという人向け。
付属のACアダプタ用のプラグは日本のコンセントに合わないかもだけど家に余ってるのを使えば問題ない筈。

zhangqingは他にもっと安い価格で側面にケーブルを挿すタイプの8ポートを出してるけど両側面にケーブル挿すと場所取るんだよね。

zhangqing ZP-POE-24-48V120W

zhangqing ZP-POE-24-48V120W
閲覧時の販売価格がUS$114.00でタイムセールで5%引きになっているので普通はもう少し高い。日本への送料は無料。
19インチラックマウント用の1Uパッチパネル風の24ポートPoEインジェクタ。電源付きでこのお値段はありがたい。
ただし、付属の電源アダプタでの供給は最大120Wということなので単純に割ると1ポート5Wとなり制限は大きめ。昨日紹介したFanvilのIP電話機なら全ポート繋いでも余裕かな。
パネルの上列が非PoEのLan側。パネルの下列が電源供給がされる側。
IEEE802.3af/at対応
10/100Mbps対応

安いんだけど、中身が粗悪だったときに怖そうなのよね。とくにL2SWなどは大きな電力を扱うので粗悪だと燃えるとか接続している機器を壊すとかありそう。よく考えて購入したい。



Up