@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(.both 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 - 对称密钥意味着只有一个密钥需要用于编码和解码客户端和服务器之间的传输,并且应该实施机制来共享它们之间的密钥(虽然不完全安全)
非对称密钥意味着有两个密钥用于对消息进行编码和解码。服务器使用私钥编码和发送消息,客户端使用公钥(通过 rsa 的证书共享或共享为称为“salt”的“密码短语”。
回到生成这些keys/keystore/trustore和certs的工具,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');
});
我希望这能回答这个问题。