用Node.js创建自签名的HTTPS服务器

https搭建服务器时,需要证书,接下来,一块了解一下证书生成!

首先打开cmd,输入openssl命令,如果可以正常访问,则可继续以下操作,否则,去自行下载openssl工具。


具体操作流程分为:

  1. 创建自己的CA机构
  2. 创建服务器端证书

创建自己的CA机构

  • 为CA生成私钥
openssl genrsa -out ssl.key 2048
  • 通过CA私钥生成CSR
openssl req -new -key ssl.key -out ca-csr.pem
  • 通过CSR文件和私钥生成CA证书
openssl x509 -req -in ca-csr.pem -signkey ssl.key -out ca-cert.pem

创建服务器端证书

  • 为服务器生成私钥
openssl genrsa -out server-key.pem 1024

在当前目录下创建openssl.cnf文件,将以下内容放入:

[req]  
    distinguished_name = req_distinguished_name  
    req_extensions = v3_req  
  
    [req_distinguished_name]  
    countryName = Country Name (2 letter code)  
    countryName_default = CN  
    stateOrProvinceName = State or Province Name (full name)  
    stateOrProvinceName_default = BeiJing  
    localityName = Locality Name (eg, city)  
    localityName_default = YaYunCun  
    organizationalUnitName  = Organizational Unit Name (eg, section)  
    organizationalUnitName_default  = Domain Control Validated  
    commonName = Internet Widgits Ltd  
    commonName_max  = 64  
  
    [ v3_req ]  
    # Extensions to add to a certificate request  
    basicConstraints = CA:FALSE  
    keyUsage = nonRepudiation, digitalSignature, keyEncipherment  
    subjectAltName = @alt_names  
  
    [alt_names]  
    #注意这个IP.1的设置,IP地址需要和你的服务器的监听地址一样
    IP.1 = 127.0.0.1
  • 利用服务器私钥文件服务器生成CSR
openssl req -new -key server-key.pem -config openssl.cnf -out server-csr.pem

一路回车。

  • 通过服务器私钥文件和CSR文件生成服务器证书
openssl x509 -req -CA ca-cert.pem -CAkey ssl.key -CAcreateserial -in server-csr.pem -out server-cert.pem -extensions v3_req -extfile openssl.cnf

一路回车。

HTTPS 服务器代码

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

var options = {
    key: fs.readFileSync('./keys/server-key.pem'),
    ca: [fs.readFileSync('./keys/ca-cert.pem')],
    cert: fs.readFileSync('./keys/server-cert.pem')
};

https.createServer(options,function(req,res){
    res.writeHead(200);
    res.end('hello world\n');
}).listen(3000,'127.0.0.1');
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容