質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

OpenSSL

OpenSSLはSSL/TLSのプロトコルと一般的な暗号のライブラリを導入するオープンソースのソフトウェアのツールキットです。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

Q&A

解決済

1回答

5765閲覧

socket.io のサーバ で SSL通信でエラー

nakano1690

総合スコア1

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

OpenSSL

OpenSSLはSSL/TLSのプロトコルと一般的な暗号のライブラリを導入するオープンソースのソフトウェアのツールキットです。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

0グッド

1クリップ

投稿2020/05/29 08:58

前提・実現したいこと

サーバー側を、node.js の socket.io の書き方で
待ち受けサーバを立てました

openssl で コマンドを送ると、

15872:error:1408F10B:SSL routines:ssl3_get_record:wrong version number:ssl\record\ssl3_record.c:332:

のエラーが出てしまいます。

何か調べる方法があれば教えていただきたいです。

サーバのソースコード

node.js

1var PORT = 5089; 2var fs = require('fs'); 3var SSL_KEY = 'C:\#HTTPS\xxx.pem'; 4var SSL_CERT= 'C:\#HTTPS\xxx.cer'; 5var SSL_CA = 'C:\#HTTPS\xxx.txt'; 6 7// -- SSL https接続 ----- 8var srv = require('https').createServer(); 9var io = require('socket.io')(srv).listen(PORT, { 10 key : fs.readFileSync(SSL_KEY).toString(), 11 cert : fs.readFileSync(SSL_CERT).toString(), 12 ca : fs.readFileSync(SSL_CA).toString() 13}); 14 15console.log('websocket server start. port=' + PORT); 16 17io.sockets.on('connection', function (socket) { 18 console.log('- connection -'); 19 //接続してきたらウェルカムメッセージを送信する 20 setTimeout(function () { 21 socket.emit('message', 'このメッセージが見えていればOK'); 22 }, 500); 23}); 24

試したこと

OPENSSLで以下のコマンドを実行しました。

openssl s_client -connect www.xxx.xxx.jp:5089

以下のようにログが出ました。

C:\#signaling>openssl s_client -connect www.xxx.xxx.jp:5089 CONNECTED(0000008C) 15872:error:1408F10B:SSL routines:ssl3_get_record:wrong version number:ssl\record\ssl3_record.c:332: --- no peer certificate available --- No client certificate CA names sent --- SSL handshake has read 5 bytes and written 216 bytes Verification: OK --- New, (NONE), Cipher is (NONE) Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE No ALPN negotiated SSL-Session: Protocol : TLSv1.2 Cipher : 0000 Session-ID: Session-ID-ctx: Master-Key: PSK identity: None PSK identity hint: None SRP username: None Start Time: 1590741981 Timeout : 7200 (sec) Verify return code: 0 (ok) Extended master secret: no ---

補足情報

socket.io ではなく、以下の websocketの書き方で実行すると
connect できるため、証明書は問題ないと考えています。

var fs = require('fs'); var https = require('https'); var WebSocket = require('ws'); var port = 5089; var SSL_KEY = 'C:\#HTTPS\xxx.pem'; var SSL_CERT= 'C:\#HTTPS\xxx.cer'; var SSL_CA = 'C:\#HTTPS\xxx.txt'; //let WebSocketServer = require('ws').Server; var server = https.createServer({ key : fs.readFileSync(SSL_KEY).toString(), cert : fs.readFileSync(SSL_CERT).toString(), ca : fs.readFileSync(SSL_CA).toString() }); server.listen(port); var wsServer = new WebSocket.Server({ server }); console.log('websocket server start. port=' + port); wsServer.on('connection', function(ws) { console.log('- websocket connection -'); : :

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決しました

サーバの書き方を変更しました。
まだよく理解できていませんが、
express というライブラリ使って書いたところうまくいきました。
それだけではないのかもしれませんが、、、

var PORT = 5089;
var https = require('https');
var fs = require('fs');
var SSL_KEY = 'ssl/xxx.pem';
var SSL_CERT= 'ssl/xxx.cer';
var SSL_CA = 'ssl/xxx.txt';

// https 接続 (ok?)
var app = require('express')();
var https = require('https');
var server = https.createServer({
key: fs.readFileSync(SSL_KEY),
cert: fs.readFileSync(SSL_CERT),
ca: fs.readFileSync(SSL_CA),
requestCert: false,
rejectUnauthorized: false
},app);
server.listen(PORT);
var io = require('socket.io').listen(server);

投稿2020/05/29 12:05

nakano1690

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問