NodeJS v12で「error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol」解決方法

NodeJS v10では正常に動作していたコードがNodeJS v12では下記のようなエラーメッセージを表示して正常に動作しなくなることがあります。

Error: write EPROTO 4568329664:error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol:../deps/openssl/openssl/ssl/statem/statem_lib.c:1942:

    at WriteWrap.onWriteComplete [as oncomplete] (internal/stream_base_commons.js:92:16)

こんなプロトコル対応していないよと書かれていますね。
今回はこれの原因と解決方法を書きます。

解決方法

NodeJS実行時にパラメーターとして--tls-min-v1.0をつける。

node --tls-min-v1.0 example

原因

「NodeJS v11.4.0」からtlsのデフォルトの最小のバージョンが「TLSv1.2」に変わりました。
https://nodejs.org/api/tls.html#tls_tls_default_min_version
それにより、TLS1.0 TLS1.1などTLSのバージョンが低い証明書を利用しているウェブサイトにアクセスする際には「対応していません」とエラーを出すようになりました。
なぜNodeJSではデフォルトのバージョンを変えたかというと、「大手4社のWebブラウザ、2020年にTLS 1.0と1.1を無効化」するからです。
https://www.itmedia.co.jp/enterprise/articles/1810/16/news077.html
実際これを書いている現時点(2020/6/30)で、TLSバージョンが低いウェブサイトにFirefoxでアクセスしてみると、下記のようなメッセージがページ情報のセキュリティのところに表示されます。

技術情報
脆弱な暗号化(...)
このWebサイトへの接続に使用されている暗号は強度が弱くプライベートではありません。
他者があなたの情報を見たりWebサイトの動作を変更できます。暗号化せずにインターネットに送信された情報は他人に傍受される可能性があります。

しかし、TLSバージョンが低いとしても、それに対してなにか作業をしないといけない場合はNodeJSが対応するTLSバージョンを変更して作業しないといけないですね。その時に使うのが解決方法のところにある--tls-min-v1.0パラメータをつけることです。
もし逆に、TLS v1.3を試してみたい場合は、同じくパラメーターを--tls-min-v1.3変えてNodeJSを実行するとTLS v1.3がデフォルトになりますので、このパラメータをつけてください。