文档章节

Node服务器创建HTTPS服务器——SSL证书

翔飘飘
 翔飘飘
发布于 04/21 21:02
字数 949
阅读 46
收藏 3
点赞 0
评论 3

HTTP与HTTPS介绍

HTTP:超文本传输协议,是浏览器与服务器之间的通讯协议;

HTTPS:以安全为目标的HTTP通道,可以简单理解为HTTP的安全升级版;

HTTPS与HTTP的区别

  • https协议需要到ca申请证书,一般免费证书很少,需要交费。
  • http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
  • http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
  • http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

Windows下创建https服务器

~ D:\workspace\javascript>express -e  nodejs-https
~ D:\workspace\javascript>cd nodejs-https && npm install

ejs@0.8.5 node_modules\ejs
express@3.2.6 node_modules\express
├── methods@0.0.1
├── fresh@0.1.0
├── cookie-signature@1.0.1
├── range-parser@0.0.4
├── debug@0.7.4
├── buffer-crc32@0.2.1
├── cookie@0.1.0
├── commander@0.6.1
├── mkdirp@0.3.4
├── send@0.1.0 (mime@1.2.6)
└── connect@2.7.11 (pause@0.0.1, qs@0.6.5, bytes@0.2.0, cookie@0.0.5, formidable@1.0.14, send@0.1.1)
~ D:\workspace\javascript\nodejs-https>git --version
git version 1.8.1.msysgit.1

~ D:\workspace\javascript\nodejs-https>openssl version -a
OpenSSL 0.9.8e 23 Feb 2007
built on: Sat Sep 15 20:34:58 EDT 2007
platform: MSys
options:  bn(64,32) md2(int) rc4(idx,int) des(ptr,risc1,16,long) blowfish(idx)
compiler: gcc -D_WINDLL -DOPENSSL_PIC -DOPENSSL_THREADS  -DDSO_DLFCN -DHAVE_DLFCN_H -DTERMIOS -DL_ENDIAN -D__CYGWIN__ -f
omit-frame-pointer -fnative-struct -O3 -mcpu=pentium -march=i486 -Wall -DOPENSSL_BN_ASM_PART_WORDS -DOPENSSL_IA32_SSE2 -
DSHA1_ASM -DMD5_ASM -DRMD160_ASM -DAES_ASM
OPENSSLDIR: "/usr/ssl"

使用openssl生成证书文件

#生成私钥key文件:
~ D:\workspace\javascript\nodejs-https>openssl genrsa -out privatekey.pem 1024
Generating RSA private key, 1024 bit long modulus
...........................++++++
........++++++
e is 65537 (0x10001)

#通过私钥生成CSR证书签名
~ D:\workspace\javascript\nodejs-https>openssl req -new -key privatekey.pem -out certrequest.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Beijing
Locality Name (eg, city) []:Beijing
Organization Name (eg, company) [Internet Widgits Pty Ltd]:fens.me
Organizational Unit Name (eg, section) []:fens.me
Common Name (eg, YOUR name) []:Conan Zhang
Email Address []:bsspirit@gmail.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

# 通过私钥和证书签名生成证书文件
~ D:\workspace\javascript\nodejs-https>openssl x509 -req -in certrequest.csr -signkey privatekey.pem -out certificate.pem
Signature ok
subject=/C=CN/ST=Beijing/L=Beijing/O=fens.me/OU=fens.me/CN=Conan Zhang/emailAddress=bsspirit@gmail.com
Getting Private key

新生成了3个文件:certificate.pem, certrequest.csr, privatekey.pem

~ D:\workspace\javascript\nodejs-https>ls -l
total 17
-rwx------  1 4294967295 mkpasswd 877 Dec 14 10:53 app.js
-rwx------  1 4294967295 mkpasswd 956 Dec 14 11:22 certificate.pem
-rwx------  1 4294967295 mkpasswd 704 Dec 14 11:21 certrequest.csr
drwx------+ 1 4294967295 mkpasswd   0 Dec 14 11:10 node_modules
-rwx------  1 4294967295 mkpasswd 216 Dec 14 11:03 package.json
-rwx------  1 4294967295 mkpasswd 887 Dec 14 11:20 privatekey.pem
drwx------+ 1 4294967295 mkpasswd   0 Dec 14 10:53 public
drwx------+ 1 4294967295 mkpasswd   0 Dec 14 10:53 routes
drwx------+ 1 4294967295 mkpasswd   0 Dec 14 10:53 views
  • privatekey.pem: 私钥
  • certrequest.csr: CSR证书签名
  • certificate.pem: 证书文件

修改启动文件:app.js

var https = require('https')
    ,fs = require("fs");

var options = {
    key: fs.readFileSync('./privatekey.pem'),
    cert: fs.readFileSync('./certificate.pem')
};

https.createServer(options, app).listen(3011, function () {
    console.log('Https server listening on port ' + 3011);
});

启动服务器

~ D:\workspace\javascript\nodejs-https>node app.js

Express server listening on port 3000
Https server listening on port 3011

Linux下创建HTTPS服务器

~ openssl version -a
OpenSSL 1.0.1 14 Mar 2012
built on: Tue Jun  4 07:26:06 UTC 2013
platform: debian-amd64
options:  bn(64,64) rc4(16x,int) des(idx,cisc,16,int) blowfish(idx)
compiler: cc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -m64 -DL_ENDIAN -DTERMIO -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wa,--noexecstack -Wall -DOPENSSL_NO_TLS1_2_CLIENT -DOPENSSL_MAX_TLS1_2_CIPHER_LENGTH=50 -DMD32_REG_T=int -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM
OPENSSLDIR: "/usr/lib/ssl"

~ openssl genrsa -out privatekey.pem 1024
~ openssl req -new -key privatekey.pem -out certrequest.csr 
~ openssl x509 -req -in certrequest.csr -signkey privatekey.pem -out certificate.pem

修改文件app.js

var https = require('https')
    ,fs = require("fs");

var options = {
    key: fs.readFileSync('./privatekey.pem'),
    cert: fs.readFileSync('./certificate.pem')
};

https.createServer(options, app).listen(3011, function () {
    console.log('Https server listening on port ' + 3011);
});

启动服务器

~ node app.js

Express server listening on port 3000
Https server listening on port 3011

 

本文转载自:http://blog.fens.me/nodejs-https-server/

共有 人打赏支持
翔飘飘
粉丝 1
博文 10
码字总数 3770
作品 0
朝阳
程序员
加载中

评论(3)

ICE冰焰火灵X
ICE冰焰火灵X

引用来自“ICE冰焰火灵X”的评论

SSL证书貌似可以自己生成吧,也就是所谓自签名。但火狐浏览器里面提示自签名某些方面不如申请来的。

引用来自“翔飘飘”的评论

自己生成的签名没有相关机构认证,浏览器访问时会提示有安全风险,做项目的话还是买阿里云的好,自己玩的话就自己做
其实我就是不喜欢受那些所谓的认证机构限制,我曾经尝试用FileZilla生成过证书,那个是可以用到HTTPS上面的吗?
翔飘飘
翔飘飘

引用来自“ICE冰焰火灵X”的评论

SSL证书貌似可以自己生成吧,也就是所谓自签名。但火狐浏览器里面提示自签名某些方面不如申请来的。
自己生成的签名没有相关机构认证,浏览器访问时会提示有安全风险,做项目的话还是买阿里云的好,自己玩的话就自己做
ICE冰焰火灵X
ICE冰焰火灵X
SSL证书貌似可以自己生成吧,也就是所谓自签名。但火狐浏览器里面提示自签名某些方面不如申请来的。
使用 PGP 保护代码完整性(三):生成 PGP 子密钥

在第三篇文章中,我们将解释如何生成用于日常工作的 PGP 子密钥。 在本系列教程中,我们提供了使用 PGP 的实用指南。在此之前,我们介绍了基本工具和概念,并介绍了如何生成并保护您的主 PG...

作者: Konstantin Ryabitsev
05/04
0
0
OpenSSH dropbear

SSL/TLS: SSL:安全的套接字层;1.0 2.0 3.0 TLS:传输层安全;1.0 1.1 1.2 1.3 SSL会话过程四个阶段: SSL Handshake Protocol: 第一阶段:ClientHello 1.协商所支持的协议的版本,如tls...

杨铄
06/26
0
0
OpenSSl生成SSL证书(支持https)

一:环境与安装说明 WIN764,Nginx服务器,OpenSSLWin64。本人使用phpStudy集成开发环境,使用Nginx+PHP,支持浏览器https请求。 nginx下载地址:http://nginx.org/en/download.html openssl...

MrBoring
05/24
0
0
细数非对称加密与对称加密的区别

有两种加密方法常常在SSL生态系统中被提及——非对称加密与对称加密。 SSL握手期间的非对称加密 当你浏览一个使用SSL证书的网站时,你浏览器做的第一件事就是和带着证书的服务器实行SSL握手。...

亚洲诚信
2017/11/08
0
0
隔墙有耳之数据在传输中的安全

大家现在都知道数据在传输的过程中很容易会被别人得到,如果我们的数据是明文传输的,那么你就非常不幸了,数据就会被别人一览无遗,那怎么做到数据在传输的时候是密文呢? 下面俺来介绍一下...

余二五
2017/11/16
0
0
深入了解ApusicAS服务器配置系列之——SSL配置

近日,随着铁路客服中心网上购票系统中逐步可以购买大部分车次的列车,12306网站的种种问题便暴露出来,估计现在信息中心及系统开发商正在紧锣密鼓关注系统运行状态,并绞尽脑汁查找一切可以...

晨曦之光
2012/03/09
0
0
CentOS 7.4 Tengine安装配置详解(五)

十四、配置Tengine支持HTTPS 1、演示环境: 备注:Tengine和CA可以部署于同一台服务器 2、修改配置文件nginx.conf,创建基于主机名的虚拟主机: server { listen 80; server_name web.vhosts...

Marion0728
06/26
0
0
Java的安全学习(包括加密,数字签名,证书和认证)

(1)消息摘要: 消息摘要(Message Digest)又称为数字摘要(Digital Digest)。它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向Hash加密函数对消息进行作用而产生。如果消息在途...

wersdffg
2015/07/21
0
0
der pem cer crt key pfx等概念及区别

证书主要的文件类型和协议有: PEM、DER、PFX、JKS、KDB、CER、KEY、CSR、CRT、CRL 、OCSP、SCEP等。 一、编码格式 X.509 - 这是一种证书标准,主要定义了证书中应该包含哪些内容.其详情可以参...

wushank
06/29
0
0
PKI信息安全知识点详细解答包含HTTPS

1. 什么是X.509? X.509标准是ITU-T设计的PKI标准,他是为了解决X.500目录中的身份鉴别和访问控制问题设计的。 2. 数字证书 数字证书的意义在于回答公钥属于谁的问题,以帮助用户安全地获得对...

诸葛西门
2017/07/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Java设计模式学习之工厂模式

在Java(或者叫做面向对象语言)的世界中,工厂模式被广泛应用于项目中,也许你并没有听说过,不过也许你已经在使用了。 简单来说,工厂模式的出现源于增加程序序的可扩展性,降低耦合度。之...

路小磊
19分钟前
0
0
npm profile 新功能介绍

转载地址 npm profile 新功能介绍 npm新版本新推来一个功能,npm profile,这个可以更改自己简介信息的命令,以后可以不用去登录网站来修改自己的简介了 具体的这个功能的支持大概是在6这个版...

durban
30分钟前
0
0
Serial2Ethernet Bi-redirection

Serial Tool Serial Tool is a utility for developing serial communications, custom protocols or device testing. You can set up bytes to send accordingly to your protocol and save......

zungyiu
36分钟前
0
0
python里求解物理学上的双弹簧质能系统

物理的模型如下: 在这个系统里有两个物体,它们的质量分别是m1和m2,被两个弹簧连接在一起,伸缩系统为k1和k2,左端固定。假定没有外力时,两个弹簧的长度为L1和L2。 由于两物体有重力,那么...

wangxuwei
51分钟前
0
0
apolloxlua 介绍

##项目介绍 apolloxlua 目前支持javascript到lua的翻译。可以在openresty和luajit里使用。这个工具分为两种模式, 一种是web模式,可以通过网页使用。另外一种是tool模式, 通常作为大规模翻...

钟元OSS
58分钟前
0
0
Mybatis入门

简介: 定义:Mybatis是一个支持普通SQL查询、存储过程和高级映射的持久层框架。 途径:MyBatis通过XML文件或者注解的形式配置映射,实现数据库查询。 特性:动态SQL语句。 文件结构:Mybat...

霍淇滨
今天
0
0
开发技术瓶颈期,如何突破

前言 读书、学习的那些事情,以前我也陆续叨叨了不少,但总觉得 “学习方法” 就是一个永远在路上的话题。个人的能力、经验积累与习惯方法不尽相同,而且一篇文章甚至一本书都很难将学习方法...

_小迷糊
今天
0
0
安装tensorflow-XXX报错

报错: tensorflow-0.5.0-cp27-none-linux_x86_64.whl is not a supported wheel on this platform. 解决: wget https://bootstrap.pypa.io/get-pip.py sudo python2.7 get-pip.py sudo p......

Yao--靠自己
今天
0
0
JVM学习手册(一):JVM模型

一直从事JAVA开发,天天和JVM打交道,仔细想想对JVM还真的不是特别了解,实在是不应该.周六看了许多资料,也算有点心得,记录一下。 JVM内存模型分为5个区域:方法区,堆,虚拟机栈,本地方法栈,程序计...

勤奋的蚂蚁
今天
0
0
转行零基础该如何学Python?这些一定要明白!

转行零基础学Python编程开发难度大吗?从哪学起?近期很多小伙伴问我,如果自己转行学习Python,完全0基础能否学会呢?Python的难度到底有多大?今天,小编就来为大家详细解读一下这个问题。...

猫咪编程
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部