Windows:信任用于节点的自签名证书(和快递)

时间:2018-02-18 21:04:38

标签: express ssl https pem pfx

我正在使用Windows,而我正在尝试通过HTTPS使用express,而我正在试图弄清楚是否有办法信任所使用的证书,这样我就不必告诉我的浏览器了“无论如何继续到不受信任的网站“。

根据this post,我知道如何为.NET Core执行此操作:使用PowerShell在个人中创建自签名证书,然后将其复制到受信任的根证书颁发机构以便它可信并且可以使用(在我的ASP.NET核心应用程序中,我配置HTTPS以使用该证书)

我必须承认,我不是证书方面的专家,我不确定究竟发生了什么,但上面就是我的想法。

因此,在this post之后,我正在使用openssl来创建Node(和Express)所需的两个HTTPS文件,但有没有办法以类似的方式信任这些文件。

我尝试在互联网上搜索从PFX转换为PEM等,以某种方式尝试将PowerShell创建的证书导出为Node要求的格式,以确保它是可信的,但我没有成功。

非常感谢任何帮助, 谢谢

1 个答案:

答案 0 :(得分:1)

@Farzad,我想您可能已经找到了解决方案,但对于其他人,这里是详细信息

关于证书的一两件事

-> DER-这是证书的二进制编码格式。因此,证书实际上是“ DER编码”方式,而不是DER证书。没有人应该说他们拥有DER证书。这不是一种证书 -> PEM。 -这是使用ASCII键编码的X509v3

-> CSR-这是证书签名请求,通常会生成该请求以发送给CA进行验证。在检查证书的域和真实性时,CA通常以CER / CRT格式发送回签名的受信任证书。它可以是PERM或DER格式,使用openssl可以将一种格式转换为另一种格式

-> CRT = CRT扩展名用于证书。证书可以编码为二进制DER或ASCII PEM。 CER和CRT扩展几乎是同义词。 * nix系统中最常见的 -> CER = .crt的备用格式(Microsoft约定)您可以使用MS Office将.crt转换为.cer(.DER编码的.cer或base64 [PEM]编码的.cer)。cer文件扩展名也可以识别IE作为运行MS cryptoAPI命令(特别是rundll32.exe cryptext.dll,CryptExtOpenCER)的命令,该命令显示用于导入和/或查看证书内容的对话框。 另请参阅-https://serverfault.com/questions/9708/what-is-a-pem-file-and-how-does-it-differ-from-other-openssl-generated-key-file

SYMMETRIC VS ASYMETRIC -对称密钥意味着仅一个密钥需要用于对客户端和服务器之间的传输进行编码和解码,并且应该实现一种机制来共享它们之间的密钥(尽管并不完全安全) 非对称密钥意味着有两个用于编码和解码消息的密钥。 Sever使用私钥对消息进行编码和发送,客户端使用公钥(通过rsa的证书(通过证书共享)或作为称为“盐”的“密码”共享)。

因此回到生成这些密钥/密钥库/ trustore和证书的工具,最常用的是 openssl keytool 。有许多在线博客对此进行了解释。这是一个

https://blogs.oracle.com/blogbypuneeth/steps-to-create-a-self-signed-certificate-using-openssl

现在回到将证书导入到信任库中,您可以在SO中引用此答案 Digital Certificate: How to import .cer file in to .truststore file using?

要完成快速https设置,请完成相同的设置

const process = require('process');
const _ = require('lodash');
const util =require('util');
const express = require('express');
const app  = express();

const appPath = require('app-root-path');
const https = require('https');
const http = require('http');

const fs = require('fs');

const bodyParser = require('body-parser');
//Extract arugments from command line
const argumentExtractor = require('./utils/argumentExtrator');

//make use of constants
const constants = require('./utils/constants');

//sample to make use of cors router
// const corsRouter = require('./controllers/corsRoute');
// app.use(corsRouter);
console.log('env vars', process.env);

app.use(bodyParser.json());
app.use(bodyParser.raw({type: () => true}));

const corsHeaders = require('./middlewares/corsHeaders');
app.use(corsHeaders);

//additional response headers
const addition_headers = require('./middlewares/additionalReponseHeaeders');
app.use(addition_headers);
debugger;


//Routing sample1
const appRouter1 = require('./controllers/appRoute1');
app.use(constants.COURSE_ROUTE,appRouter1);

//Routing sample 2
const appRouter2 = require('./controllers/appRoute2');
app.use(constants.HEADER_ROUTE, appRouter2);



//getting the commandline properties
console.log('command line arguments');
_.each(process.argv, (data)=>{

    console.log('each data', data);

});
console.log('env from argument',argumentExtractor.env);
console.log('port from argument',argumentExtractor.port);

//spread opertaor example
const oldArray = ['1', 2];
const newArray = [...oldArray];
console.log(newArray);

//Rest operator- basically to handle mutiple inputs
const sampleFunc = (...params)=>{
    return params;
}
console.log(sampleFunc(3,4));
console.log(sampleFunc(3,4,5,6 ));

const port = argumentExtractor.port || 3000;

let options= {
    key:fs.readFileSync(appPath+'/certs/nodejs_key.pem'),
    cert: fs.readFileSync(appPath+'/certs/nodejs_cert.cert'),
    requestCert: false,
    rejectUnAuthorized: false,
    passphrase:'<passphrase used in openssl cert creation>'
};

http.createServer(app).listen(port ,()=>{
    console.log('The listening port is:'+port);
});

https.createServer(options,app).listen(5000, ()=>{
    console.log('This is the https server port ...5000');
});

我希望这可以回答问题。