我正在使用Node.js中的Express框架来创建Web服务器。我希望传输基于SSL。
创建https Web服务器的代码如下。
var app = express.createServer({
key: fs.readFileSync('./conf/key.pem'),
cert: fs.readFileSync('./conf/cert.pem')
});
module.exports = app;
问:如何创建express所需的key.pem和cert.pem?
Answers:
您需要的两个文件是PEM编码的SSL证书和私钥。PEM编码的证书和密钥是带有开始/结束定界符的Base64编码文本,看起来像-----BEGIN RSA PRIVATE KEY-----
或相似的。
要创建SSL证书,您首先需要生成一个私钥和一个证书签名请求或CSR(其中也包含您的公钥)。您可以通过多种方式来执行此操作,但这是OpenSSL中的方法。
openssl req -newkey rsa:2048 -new -nodes -keyout key.pem -out csr.pem
这将导致您输入一个交互式提示,以生成一个2048位RSA私钥和一个CSR,其中包含您在提示处选择输入的所有信息。(注意:“公用名”是您想要用来访问站点的域名的位置。)完成此操作后,通常需要将此CSR提交给受信任的证书颁发机构,并在他们通过验证之后您的请求将获得证书。
如果您不关心证书是否受信任(通常出于开发目的),则可以创建一个自签名证书。为此,我们可以使用几乎同一行,但是我们将传递两个额外的参数。
openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem
这将为您提供证书(有效期为10年)和密钥对,您可以在发布的代码段中使用它。
只需遵循以下步骤:
创建要在其中存储密钥和证书的文件夹:
mkdir conf
转到该目录:
cd conf
抓取此ca.cnf
文件以用作配置快捷方式:
wget https://raw.githubusercontent.com/anders94/https-authorized-clients/master/keys/ca.cnf
使用以下配置创建新的证书颁发机构:
openssl req -new -x509 -days 9999 -config ca.cnf -keyout ca-key.pem -out ca-cert.pem
现在我们已经在ca-key.pem
和中拥有了证书颁发机构,现在让我们ca-cert.pem
为服务器生成一个私钥:
openssl genrsa -out key.pem 4096
抓取此server.cnf
文件以用作配置快捷方式:
wget https://raw.githubusercontent.com/anders94/https-authorized-clients/master/keys/server.cnf
使用以下配置生成证书签名请求:
openssl req -new -config server.cnf -key key.pem -out csr.pem
签署请求:
openssl x509 -req -extfile server.cnf -days 999 -passin "pass:password" -in csr.pem -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem
我在这里找到了此过程,以及有关如何使用这些证书的更多信息。