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

Jef*_*rey 84 ssl https webserver pem node.js

我在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;
Run Code Online (Sandbox Code Playgroud)

问题:如何创建快递所需的key.pem和cert.pem?

Pau*_*rer 186

您需要的两个文件是PEM编码的SSL证书和私钥.PEM编码的证书和密钥是Base64编码的文本,其开头/结尾分隔符看起来像-----BEGIN RSA PRIVATE KEY-----或类似.

要创建SSL证书,首先需要生成私钥和证书签名请求,或CSR(也包含您的公钥).您可以通过多种方式执行此操作,但这是OpenSSL中的方法.

openssl req -newkey rsa:2048 -new -nodes -keyout key.pem -out csr.pem
Run Code Online (Sandbox Code Playgroud)

这将导致您进入交互式提示以生成2048位RSA私钥和CSR,其中包含您在提示时选择输入的所有信息.(注意:通用名称是您要用于访问站点的域名.)完成此操作后,您通常会将此CSR提交给受信任的证书颁发机构,并且一旦验证完毕您的要求,您将收到证书.

如果您不关心您的证书是否受信任(通常用于开发目的),您只需创建一个自签名证书即可.为此,我们可以使用几乎相同的行,但我们将传递两个额外的参数.

openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem
Run Code Online (Sandbox Code Playgroud)

这将为您提供证书(有效期为10年)和密钥对,您可以在您发布的代码段中使用.

  • 客户端证书和密钥怎么样? (2认同)
  • 他们将写入shell的当前工作目录. (2认同)
  • 请注意,以这种方式生成的自签名证书是版本 1,包含 CN,但不包含 SAN。“从 58 版开始,Chrome 需要 SSL 证书才能使用 SAN(主题备用名称)而不是流行的通用名称 (CN),因此 CN 支持已被删除。” [使用自签名证书时使用 openssl 修复 Chrome 58+ [missing_subjectAltName]](https://alexanderzeitler.com/articles/Fixing-Chrome-missing_subjectAltName-selfsigned-cert-openssl/) (2认同)

Joh*_*ers 11

只需遵循以下程序:

  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

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