ホームページ ウェブフロントエンド jsチュートリアル Node.js での https ユースケースの分析

Node.js での https ユースケースの分析

May 24, 2018 am 09:53 AM
https javascript node.js

今回は、Node.jsでのhttpsの使用事例の分析と、Node.jsでhttpsを使用する際の注意事項についてお届けします。実際の事例を見てみましょう。

モジュール概要

このモジュールの重要性は、基本的に強調する必要はありません。現在、ネットワーク セキュリティ の問題がますます深刻になっているため、Web サイトが HTTPS を採用するのは避けられない傾向です。

nodejs では、HTTPS 関連の機能を完了するために https モジュールが提供されています。公式ドキュメントから判断すると、http モジュールの使用法と非常に似ています。

この記事は主に 2 つの部分で構成されています:

  1. クライアントとサーバーの例による https モジュールの入門説明。

  2. 信頼できないセキュリティ証明書を使用して Web サイトにアクセスする方法。 (12306 を例にします)

スペースが限られているため、この記事では HTTPS プロトコルと関連する技術システムについてあまり説明できません。ご質問がある場合は、メッセージを残してください。

クライアントの例

要求されたアドレスがhttpsプロトコルであることを除いて、使用法はhttpモジュールと非常に似ています。コードは次のとおりです:

var https = require('https');
https.get('https://www.baidu.com', function(res){
  console.log('status code: ' + res.statusCode);
  console.log('headers: ' + res.headers);
  res.on('data', function(data){
    process.stdout.write(data);
  });
}).on('error', function(err){
  console.error(err);
});
ログイン後にコピー

サーバーの例

にHTTPSサービスを提供します。外の世界では、HTTPS 証明書が必要です。すでに HTTPS 証明書をお持ちの場合は、証明書の生成手順をスキップできます。そうでない場合は、次の手順を参照して証明書を生成できます

1. 証明書を保存するディレクトリを作成します。

mkdir cert
cd cert
ログイン後にコピー
2. 秘密鍵を生成します。

openssl genrsa -out chyingp-key.pem 2048
ログイン後にコピー
3. 証明書署名リクエストを生成します (csr は証明書署名リクエストを意味します)。

rree

4. 証明書を生成します。

openssl req -new \
 -sha256
 -key chyingp-key.key.pem \
 -out chyingp-csr.pem \
 -subj "/C=CN/ST=Guandong/L=Shenzhen/O=YH Inc/CN=www.chyingp.com"
ログイン後にコピー

HTTPSサーバー

コードは次のとおりです:

openssl x509 \
 -req -in chyingp-csr.pem \
 -signkey chyingp-key.pem \
 -out chyingp-cert.pem
ログイン後にコピー
ドメイン名www.chyingp.comを持っていないので、最初にローカルホストを構成しました

127.0.0.1 www.chyingp.com

サービスを開始するには、ブラウザで http://www.chyingp.com:3000 にアクセスします。証明書が信頼できないというメッセージがブラウザーに表示されることに注意してください。「信頼」をクリックしてアクセスを続けてください。

高度な例: 信頼できないセキュリティ証明書を使用して Web サイトにアクセスする

ここでは、例としてお気に入りの 12306 を示します。ブラウザから 12306 のチケット購入ページ https://kyfw.12306.cn/otn/regist/init にアクセスすると、Chrome がアクセスできなくなります。これは、12306 の証明書が独自に発行されており、Chrome が確認できないためです。それは彼の安全です。

この状況に対処するには、次の方法が使用できます:

訪問をやめる: 新年に帰省するためのチケットを手に入れようとしている仲間たちは、それは受け入れられないと述べています。
  1. セキュリティ警告を無視してアクセスを続行します: ほとんどの場合、ブラウザによって許可されますが、セキュリティ プロンプトが表示されたままになります。
  2. 12306 の CA ルート証明書をインポートします。ブラウザはこれに従い、アクセスが安全であると判断します。 (実際には、12306 で使用される署名アルゴリズムには十分なセキュリティ レベルがないため、セキュリティに関するヒントがまだあります)
  3. 例: セキュリティ制限のトリガー

同様に、ノード https クライアントを通じてリクエストを開始すると、同じ問題に遭遇します。コードは次のとおりです。

var https = require('https');
var fs = require('fs');
var options = {
  key: fs.readFileSync('./cert/chyingp-key.pem'), // 私钥
  cert: fs.readFileSync('./cert/chyingp-cert.pem') // 证书
};
var server = https.createServer(options, function(req, res){
  res.end('这是来自HTTPS服务器的返回');
});
server.listen(3000);
ログイン後にコピー
上記のコードを実行すると、次のエラー メッセージが表示されます。これは、セキュリティ証明書が信頼できず、継続的なアクセスが拒否されたことを意味します。

{ エラー: 証明書チェーン内の自己署名証明書

エラー (ネイティブ)
TLSSocket.emit (events.js:185:7)

TLSSocket._finishInit (_tls_wrap.js:580:8)
TLSWrap .ssl.onhandshakedone (_tls_wrap.js:412:38) コード: 'SELF_SIGNED_CERT_IN_CHAIN' }

ps:个人认为这里的错误提示有点误导人,12306网站的证书并不是自签名的,只是对证书签名的CA是12306自家的,不在可信列表里而已。自签名证书,跟自己CA签名的证书还是不一样的。

类似在浏览器里访问,我们可以采取如下处理:

  1. 不建议:忽略安全警告,继续访问;

  2. 建议:将12306的CA加入受信列表;

方法1:忽略安全警告,继续访问

非常简单,将 rejectUnauthorized 设置为 false 就行,再次运行代码,就可以愉快的返回页面了。

// 例子:忽略安全警告
var https = require('https');
var fs = require('fs');
var options = { 
  hostname: 'kyfw.12306.cn',
  path: '/otn/leftTicket/init',
  rejectUnauthorized: false // 忽略安全警告
};
var req = https.get(options, function(res){ 
  res.pipe(process.stdout);  
});
req.on('error', function(err){
  console.error(err.code);
});
ログイン後にコピー

方法2:将12306的CA加入受信列表

这里包含3个步骤:

  1. 下载 12306 的CA证书

  2. 将der格式的CA证书,转成pem格式

  3. 修改node https的配置

1、下载 12306 的CA证书

在12306的官网上,提供了CA证书的 下载地址 ,将它保存到本地,命名为 srca.cer。

2、将der格式的CA证书,转成pem格式

https初始化client时,提供了 ca 这个配置项,可以将 12306 的CA证书添加进去。当你访问 12306 的网站时,client就会用ca配置项里的 ca 证书,对当前的证书进行校验,于是就校验通过了。

需要注意的是,ca 配置项只支持 pem 格式,而从12306官网下载的是der格式的。需要转换下格式才能用。关于 pem、der的区别,可参考 这里 。

openssl x509 -in srca.cer -inform der -outform pem -out srca.cer.pem
ログイン後にコピー

3、修改node https的配置

修改后的代码如下,现在可以愉快的访问12306了。

// 例子:将12306的CA证书,加入我们的信任列表里
var https = require('https');
var fs = require('fs');
var ca = fs.readFileSync('./srca.cer.pem');
var options = { 
 hostname: 'kyfw.12306.cn',
 path: '/otn/leftTicket/init',
 ca: [ ca ]
};
var req = https.get(options, function(res){ 
 res.pipe(process.stdout); 
});
req.on('error', function(err){
 console.error(err.code);
});
ログイン後にコピー

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

设计模式的策略模式怎样在前端中使用

怎样使用JS+H5实现微信摇一摇

以上がNode.js での https ユースケースの分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 Dec 17, 2023 pm 02:54 PM

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 はじめに: 技術の継続的な発展により、音声認識技術は人工知能の分野の重要な部分になりました。 WebSocket と JavaScript をベースとしたオンライン音声認識システムは、低遅延、リアルタイム、クロスプラットフォームという特徴があり、広く使用されるソリューションとなっています。この記事では、WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法を紹介します。

WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー Dec 17, 2023 pm 05:30 PM

WebSocketとJavaScript:リアルタイム監視システムを実現するためのキーテクノロジー はじめに: インターネット技術の急速な発展に伴い、リアルタイム監視システムは様々な分野で広く利用されています。リアルタイム監視を実現するための重要なテクノロジーの 1 つは、WebSocket と JavaScript の組み合わせです。この記事では、リアルタイム監視システムにおける WebSocket と JavaScript のアプリケーションを紹介し、コード例を示し、その実装原理を詳しく説明します。 1.WebSocketテクノロジー

JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 Dec 17, 2023 pm 12:09 PM

JavaScript と WebSocket を使用してリアルタイム オンライン注文システムを実装する方法の紹介: インターネットの普及とテクノロジーの進歩に伴い、ますます多くのレストランがオンライン注文サービスを提供し始めています。リアルタイムのオンライン注文システムを実装するには、JavaScript と WebSocket テクノロジを使用できます。 WebSocket は、TCP プロトコルをベースとした全二重通信プロトコルで、クライアントとサーバー間のリアルタイム双方向通信を実現します。リアルタイムオンラインオーダーシステムにおいて、ユーザーが料理を選択して注文するとき

WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 Dec 17, 2023 am 09:39 AM

WebSocket と JavaScript を使用してオンライン予約システムを実装する方法 今日のデジタル時代では、ますます多くの企業やサービスがオンライン予約機能を提供する必要があります。効率的かつリアルタイムのオンライン予約システムを実装することが重要です。この記事では、WebSocket と JavaScript を使用してオンライン予約システムを実装する方法と、具体的なコード例を紹介します。 1. WebSocket とは何ですか? WebSocket は、単一の TCP 接続における全二重方式です。

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 Dec 17, 2023 pm 05:13 PM

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 はじめに: 今日、天気予報の精度は日常生活と意思決定にとって非常に重要です。テクノロジーの発展に伴い、リアルタイムで気象データを取得することで、より正確で信頼性の高い天気予報を提供できるようになりました。この記事では、JavaScript と WebSocket テクノロジを使用して効率的なリアルタイム天気予報システムを構築する方法を学びます。この記事では、具体的なコード例を通じて実装プロセスを説明します。私たちは

JavaScriptでinsertBeforeを使用する方法 JavaScriptでinsertBeforeを使用する方法 Nov 24, 2023 am 11:56 AM

使用法: JavaScript では、insertBefore() メソッドを使用して、DOM ツリーに新しいノードを挿入します。このメソッドには、挿入される新しいノードと参照ノード (つまり、新しいノードが挿入されるノード) の 2 つのパラメータが必要です。

簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 Jan 05, 2024 pm 06:08 PM

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

https ワークフローはどのようなものですか? https ワークフローはどのようなものですか? Apr 07, 2024 am 09:27 AM

https ワークフローには、クライアントから開始されたリクエスト、サーバー応答、SSL/TLS ハンドシェイク、データ送信、クライアント側レンダリングなどの手順が含まれており、これらの手順を通じて、送信中のデータのセキュリティと整合性を確保できます。

See all articles