📌  相关文章
📜  openssl 生成自签名证书 - Shell-Bash (1)

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

OpenSSL 生成自签名证书

在开发过程中,经常需要使用 https 协议来进行数据传输,此时需要使用证书来加密数据。一般生产环境下会向证书颁发机构购买证书,但是在开发过程中可以使用自签名证书来进行测试。

本文介绍使用 OpenSSL 工具生成自签名证书的方法。

安装 OpenSSL

如果你还没有安装 OpenSSL,可以使用以下命令进行安装:

# CentOS/RHEL
yum install openssl

# Ubuntu/Debian
apt-get install openssl
生成私钥

首先我们需要生成私钥文件。可以使用以下命令生成 2048 位的 RSA 密钥:

openssl genpkey -algorithm RSA -out private.key -pkeyopt rsa_keygen_bits:2048

上述命令中,-algorithm RSA 表示使用 RSA 算法生成密钥,-out private.key 表示输出私钥文件到当前目录下的 private.key 文件中,-pkeyopt rsa_keygen_bits:2048 表示指定密钥长度为 2048 位。

生成证书请求文件

在生成证书之前,需要先生成证书请求文件。可以使用以下命令生成证书请求文件:

openssl req -new -key private.key -out certificate.csr

上述命令中,-new 表示新的证书请求,-key private.key 表示使用私钥文件来生成证书请求,-out certificate.csr 表示输出证书请求到当前目录下的 certificate.csr 文件中。

在执行该命令时,需要填写一些证书信息,例如 Common Name、Organization、Email 等信息,这些信息将会包含在生成的证书中。一般来说,开发环境下可以随意填写。

生成自签名证书

有了私钥和证书请求文件,可以使用以下命令生成自签名证书:

openssl x509 -req -days 365 -in certificate.csr -signkey private.key -out certificate.crt

上述命令中,-req 表示使用证书请求文件,-days 365 表示证书有效期为 365 天,-in certificate.csr 表示输入证书请求文件,-signkey private.key 表示使用私钥文件来签名证书,-out certificate.crt 表示输出证书到当前目录下的 certificate.crt 文件中。

这样就生成了一个自签名的证书,可以将该证书安装到服务器中使用。

使用自签名证书

以 Node.js 为例,可以使用以下代码启动一个 https 服务器并使用自签名证书:

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

const options = {
  key: fs.readFileSync('private.key'),
  cert: fs.readFileSync('certificate.crt')
};

https.createServer(options, function (req, res) {
  res.writeHead(200);
  res.end('hello world\n');
}).listen(443);

上述代码中,options 对象中的 keycert 属性分别指定私钥文件和证书文件的路径。启动服务器后,就可以使用 https 协议访问该服务器了。

小结

本文介绍了使用 OpenSSL 工具生成自签名证书的方法,并给出了一个 Node.js https 服务器的示例。开发过程中可以使用自签名证书进行测试,但在生产环境中还是需要向证书颁发机构购买证书。