Heim > Web-Frontend > js-Tutorial > Hauptteil

Analyse von https-Anwendungsfällen in Node.js

php中世界最好的语言
Freigeben: 2018-05-24 09:53:12
Original
2207 Leute haben es durchsucht

Dieses Mal werde ich Ihnen eine Analyse der https-Nutzungsfälle in Node.js bringen. Was sind die Vorsichtsmaßnahmen für die Verwendung von https in Node.js? Im Folgenden sind praktische Fälle aufgeführt. Schauen wir uns das einmal an.

ModulÜbersicht

Die Bedeutung dieses Moduls muss grundsätzlich nicht betont werden. Heutzutage, da die Netzwerk-Sicherheitsprobleme immer schwerwiegender werden, ist es für Websites ein unvermeidlicher Trend, HTTPS einzuführen.

In nodejs wird das https-Modul bereitgestellt, um HTTPS-bezogene Funktionen auszuführen. Aus der offiziellen Dokumentation geht hervor, dass es der Verwendung des http-Moduls sehr ähnlich ist.

Dieser Artikel besteht hauptsächlich aus zwei Teilen:

  1. Eine einführende Erklärung des https-Moduls anhand von Beispielen des Clients und Servers.

  2. So greifen Sie auf Websites mit nicht vertrauenswürdigen Sicherheitszertifikaten zu. (Nehmen Sie 12306 als Beispiel)

Aufgrund des begrenzten Platzes kann dieser Artikel nicht zu viel über das HTTPS-Protokoll und verwandte technische Systeme erklären. Wenn Sie Fragen haben, hinterlassen Sie bitte eine Nachricht an Austausch.

Client-Beispiel

Die Verwendung ist dem http-Modul sehr ähnlich, außer dass die angeforderte Adresse das https-Protokoll ist. Der Code lautet wie folgt :

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);
});
Nach dem Login kopieren

Serverbeispiel

Für die Bereitstellung von HTTPS-Diensten nach außen ist ein HTTPS-Zertifikat erforderlich. Wenn Sie bereits über ein HTTPS-Zertifikat verfügen, können Sie den Schritt zur Zertifikatserstellung überspringen. Wenn nicht, können Sie die folgenden Schritte ausführen

, um ein Zertifikat zu erstellen

1. Erstellen Sie ein Verzeichnis zum Speichern des Zertifikats.

mkdir cert
cd cert
Nach dem Login kopieren

2. Privaten Schlüssel generieren.

openssl genrsa -out chyingp-key.pem 2048
Nach dem Login kopieren

3. Generieren Sie eine Zertifikatssignierungsanforderung (csr bedeutet Certificate Signing Request).

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"
Nach dem Login kopieren

4. Zertifikat erstellen.

openssl x509 \
 -req -in chyingp-csr.pem \
 -signkey chyingp-key.pem \
 -out chyingp-cert.pem
Nach dem Login kopieren

HTTPS-Server

Der Code lautet wie folgt:

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);
Nach dem Login kopieren

Da ich den Domainnamen www.chyingp.com nicht habe, habe ich Konfigurieren Sie zuerst den lokalen Host

127.0.0.1 www.chyingp.com

Starten Sie den Dienst und besuchen Sie http://www.chyingp.com:3000 im Browser . Beachten Sie, dass der Browser Sie darauf hinweist, dass das Zertifikat unzuverlässig ist. Klicken Sie einfach auf „Vertrauen“ und fahren Sie mit dem Besuch fort.

Fortgeschrittenes Beispiel: Zugriff auf eine Website mit einem nicht vertrauenswürdigen Sicherheitszertifikat

Hier ist unser Favorit 12306 als Beispiel. Wenn wir über den Browser auf die Ticketkaufseite von 12306 https://kyfw.12306.cn/otn/regist/init zugreifen, verhindert Chrome den Zugriff darauf. Dies liegt daran, dass das Zertifikat von 12306 selbst ausgestellt wird und Chrome es nicht bestätigen kann . Seine Sicherheit.

Um mit dieser Situation umzugehen, können die folgenden Methoden angewendet werden:

  1. Besuchen Sie nicht mehr: Sagen Sie Dorfbewohner, die unbedingt Tickets für die Heimreise zum Neujahr ergattern möchten es ist inakzeptabel.

  2. Sicherheitswarnung ignorieren und weiter besuchen: In den meisten Fällen lässt der Browser dies zu, die Sicherheitsabfrage wird jedoch weiterhin angezeigt.

  3. Importieren Sie das CA-Stammzertifikat von 12306: Der Browser gehorcht und geht davon aus, dass der Zugriff sicher ist. (Eigentlich gibt es noch Sicherheitstipps, da der von 12306 verwendete Signaturalgorithmus nicht sicher genug ist)

Beispiel: Auslösen von Sicherheitsbeschränkungen

Ähnlich Das gleiche Problem tritt auch auf, wenn Sie Anfragen über den Knoten-https-Client stellen. Machen wir ein Experiment. Der Code lautet wie folgt:

var https = require('https');
https.get('https://kyfw.12306.cn/otn/regist/init', function(res){  
  res.on('data', function(data){
    process.stdout.write(data);
  });
}).on('error', function(err){
  console.error(err);
});
Nach dem Login kopieren

Wenn Sie den obigen Code ausführen, erhalten Sie die folgende Fehlermeldung, was bedeutet, dass das Sicherheitszertifikat unzuverlässig ist und der weitere Zugriff verweigert wird.

{ Fehler: selbstsigniertes Zertifikat in der Zertifikatskette
bei Fehler (nativ)
bei TLSSocket. (_tls_wrap.js:1055:38)
bei emitNone (events.js:86:13)
bei TLSSocket.emit (events.js:185:7)
bei TLSSocket._finishInit (_tls_wrap.js:580:8)
bei TLSWrap.ssl.onhandshakedone (_tls_wrap.js:412:38) Code: '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);
});
Nach dem Login kopieren

方法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
Nach dem Login kopieren

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);
});
Nach dem Login kopieren

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

推荐阅读:

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

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

Das obige ist der detaillierte Inhalt vonAnalyse von https-Anwendungsfällen in Node.js. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!