📜  来自 pem 的 pkcs12 证书 (1)

📅  最后修改于: 2023-12-03 15:10:41.538000             🧑  作者: Mango

来自 PEM 的 PKCS12 证书

什么是 PEM 和 PKCS12?

PEM 是一种证书文件格式,具有可读性,容易阅读和用户友好性。大部分的证书颁发机构 (CA) 发布的证书都是 PEM 格式的。而 PKCS12 是另一种证书格式,它与 PEM 格式不同,它是二进制格式,不可读性高,但可以包含证书和密钥。

什么是 PKCS12 证书?

PKCS12 是一个标准格式的证书和密钥档案。它是一个二进制格式的文件,用于储存加密证书、私钥以及可选的公钥证书。PKCS12 证书可以被用于交换公钥和私钥信息,而且也被广泛应用在数字签名和加密等信息安全领域中。

如何使用 PEM 生成 PKCS12 证书文件?

若已有 PEM 文件,可以使用 OpenSSL 命令轻松生成 PKCS12 证书文件。具体步骤如下:

  1. 将 PEM 格式的证书和密钥生成 PKCS12 格式的加密证书:
    openssl pkcs12 -export -in cert.pem -inkey key.pem -out cert.pfx
    
  2. 根据提示输入密码并验证。
  3. 最终生成的 PKCS12 证书已保存在 cert.pfx 文件中。
如何从 PKCS12 文件中提取证书和密钥?

可以使用 OpenSSL 命令从 PKCS12 文件中提取证书和私钥。具体步骤如下:

  1. 提取加密证书:
    openssl pkcs12 -in cert.pfx -clcerts -nokeys -out cert.pem
    
  2. 根据提示输入密码并验证。
  3. 最终生成的 cert.pem 文件即为加密证书。

同样的,也可以单独提取私钥,具体步骤如下:

  1. 提取私钥:
    openssl pkcs12 -in cert.pfx -nocerts -out key.pem
    
  2. 根据提示输入密码并验证。
  3. 最终生成的 key.pem 文件即为私钥。
如何在 Node.js 中使用 PKCS12 证书?

在 Node.js 中使用 PKCS12 证书,需要使用 Node.js 的 tls 模块。具体实现方式如下:

const fs = require('fs');
const tls = require('tls');

const options = {
  pfx: fs.readFileSync('cert.pfx'),
  passphrase: 'mypassword'
};

const server = tls.createServer(options, (socket) => {
  socket.write('Hello World!');
  socket.end();
});

server.listen(8080, () => {
  console.log('Server started on port 8080');
});

options 中,pfx 属性表示证书的二进制形式,passphrase 属性则表示证书的密码。

结论

PKCS12 证书是一种加密证书和密钥档案格式,它与 PEM 格式具有很大的区别。本文介绍了如何使用 OpenSSL 命令生成 PKCS12 证书、提取证书和密钥,以及如何在 Node.js 中使用 PKCS12 证书。