如何为https Web服务器创建.pem文件


90

我正在使用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:


200

您需要的两个文件是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年)和密钥对,您可以在发布的代码段中使用它。


2
客户证书和密钥怎么办?
nkint 2014年

1
这篇文章完成了,同时运行他粘贴的两个命令以赢得keys + cert。客户端不建立信任,仅建立服务器。
Ninjaxor

@paul您能告诉我这些.pem密钥和证书在哪里生成吗?我的意思是哪个目录?我正在使用Ubuntu 14
StormTrooper,2015年

2
它们将写入您的Shell的当前工作目录。
Paul Kehrer 2015年

1
请注意,以这种方式生成的自签名证书是版本1,包含CN,但不包含SAN。“自版本58开始,Chrome要求SSL证书使用SAN(主题备用名称)代替流行的通用名称(CN),因此,对CN的支持已删除。” [使用自签名证书时,使用openssl修复Chrome 58+ [missing_subjectAltName]与openssl](alexanderzeitler.com/articles/…
Zhiyong

12

只需遵循以下步骤:

  1. 创建要在其中存储密钥和证书的文件夹:

    mkdir conf


  1. 转到该目录:

    cd conf


  1. 抓取此ca.cnf文件以用作配置快捷方式:

    wget https://raw.githubusercontent.com/anders94/https-authorized-clients/master/keys/ca.cnf


  1. 使用以下配置创建新的证书颁发机构:

    openssl req -new -x509 -days 9999 -config ca.cnf -keyout ca-key.pem -out ca-cert.pem


  1. 现在我们已经在ca-key.pem和中拥有了证书颁发机构,现在让我们ca-cert.pem为服务器生成一个私钥:

    openssl genrsa -out key.pem 4096


  1. 抓取此server.cnf文件以用作配置快捷方式:

    wget https://raw.githubusercontent.com/anders94/https-authorized-clients/master/keys/server.cnf


  1. 使用以下配置生成证书签名请求:

    openssl req -new -config server.cnf -key key.pem -out csr.pem


  1. 签署请求:

    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

我在这里找到了此过程,以及有关如何使用这些证书的更多信息。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.