Google HomeでGoogleカレンダーの予定をIFTTTでWebhook投げて喋らせてたのがある日止まってたので見に行くと、エラーで止まってたので調べた

エラー内容

Unable to make web request: Error: write EPROTO 140497521637184:error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version:../deps/openssl/openssl/ssl/record/rec_layer_s3.c:1544:SSL alert number 70

調べた

参考: openssl s_client コマンドでウェブサーバーの SSL/TLS 対応状況を診断する | ラボラジアン

Google HomeへのリバースプロキシとしてNginxを立ててたのですが、そこでSSLの古いプロトコルにしか対応してないのが原因らしい

変更内容

変更前: ssl_protocols SSLv2 SSLv3 TLSv1;

変更後: ssl_protocols TLSv1.2 TLSv1.3;

補足

場合によっては、TLSv1.3に対応したNginxをビルドし直さないといけない、といったケースがあるようですが、今回はDockerイメージのNginxを使っていたところ、その必要はないようでした

本記事で対象となったNginxのバージョンは以下の通りです

1
2
3
4
5
6
$ docker-compose exec nginx nginx -V
nginx version: nginx/1.19.0
built by gcc 9.2.0 (Alpine 9.2.0)
built with OpenSSL 1.1.1d 10 Sep 2019 (running with OpenSSL 1.1.1g 21 Apr 2020)
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --with-perl_modules_path=/usr/lib/perl5/vendor_perl --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-Os -fomit-frame-pointer' --with-ld-opt=-Wl,--as-needed