JavaScriptとNode.jsで発生するエラー "Error: write EPROTO 34557064:error:100000f7:SSL routines:OPENSSL_internal:WRONG_VERSION_NUMBER" の原因と解決方法
JavaScriptとNode.jsにおけるエラー "Error: write EPROTO 34557064:error:100000f7:SSL routines:OPENSSL_internal:WRONG_VERSION_NUMBER" の解説
サーバー側とクライアント側のTLS/SSLプロトコルのバージョンが異なる
サーバー側とクライアント側で、使用しているTLS/SSLプロトコルのバージョンが異なる場合、このエラーが発生します。例えば、サーバー側がTLS 1.3に対応しているのに、クライアント側がTLS 1.2しか対応していない場合、このエラーが発生します。
解決策
この問題を解決するには、以下の方法を試してください。
- クライアント側のTLS/SSLプロトコルのバージョンを最新にアップデートする
- サーバー側のTLS/SSLプロトコルのバージョンを、クライアント側が対応しているバージョンに設定する
使用しているライブラリが古い場合、TLS/SSLプロトコルの最新バージョンに対応していない可能性があります。
- 使用しているライブラリを最新バージョンにアップデートする
上記以外にも、ファイアウォールなどの設定が原因で、このエラーが発生する可能性があります。
補足
- 上記の解決策を試しても問題が解決しない場合は、専門家に相談することをおすすめします。
const https = require('https');
const options = {
hostname: 'www.example.com',
port: 443,
path: '/',
method: 'GET',
};
const req = https.request(options, (res) => {
console.log('statusCode:', res.statusCode);
console.log('headers:', res.headers);
res.on('data', (d) => {
process.stdout.write(d);
});
});
req.on('error', (e) => {
console.error(e);
});
req.end();
このコードを実行すると、以下のような出力が得られます。
statusCode: 200
headers: {
'content-type': 'text/html; charset=utf-8',
'transfer-encoding': 'chunked',
'connection': 'close',
...
}
<!DOCTYPE html>
<html>
<head>
<title>Example Domain</title>
</head>
<body>
<h1>Welcome to Example Domain</h1>
</body>
</html>
エラー発生時の出力例
以下のコードは、サーバー側のTLS/SSLプロトコルのバージョンとクライアント側のバージョンが異なる場合に発生するエラーの出力例です。
const https = require('https');
const options = {
hostname: 'www.example.com',
port: 443,
path: '/',
method: 'GET',
// 以下、TLS/SSLプロトコルのバージョンを指定
tls: {
protocol: 'TLSv1.2',
},
};
const req = https.request(options, (res) => {
console.log('statusCode:', res.statusCode);
console.log('headers:', res.headers);
res.on('data', (d) => {
process.stdout.write(d);
});
});
req.on('error', (e) => {
console.error(e);
});
req.end();
Error: write EPROTO 34557064:error:100000f7:SSL routines:OPENSSL_internal:WRONG_VERSION_NUMBER
その他の解決方法
Node.jsを最新バージョンにアップデートします。
ファイアウォールの設定を確認する
ファイアウォールの設定を確認し、HTTPS通信が許可されていることを確認します。
プロキシの設定を確認する
プロキシを使用している場合、プロキシの設定が原因で、通信が遮断されている可能性があります。
サーバー側の設定が原因で、問題が発生している可能性があります。
サーバー側の設定を確認し、TLS/SSLプロトコルのバージョンが正しく設定されていることを確認します。
javascript node.js