在本指南中,我们提供了有关如何使用 OpenSSL 实用程序创建自签名证书的分步指南。您可以按照本指南使用命令创建自签名证书或使用 shell 脚本自动创建自签名证书。
Openssl 是一个创建自签名证书的便捷实用程序。您可以在所有操作系统上使用 OpenSSL,例如 Windows、MAC 和 Linux 版本。
什么是自签名证书?
自签名证书是未经公共或私有证书颁发机构签名的 SSL/TSL 证书。相反,它由创建者自己的个人或根 CA 证书进行签名。
以下是我们向 Verisign 或 comodo 等知名证书颁发机构请求付费 SSL/TLS 证书的操作。
- 使用私钥创建 证书签名请求 (CSR) 。CSR 包含有关位置、组织和 FQDN(完全限定域名)的详细信息。
- 将 CSR 发送给受信任的 CA 机构。
- CA 机构将向您发送由其根证书机构和私钥签名的 SSL 证书。
- 然后,您可以验证 SSL 证书并将其用于您的应用程序。
但对于自签名证书,这就是我们所做的。
- 创建我们自己的根CA证书和CA私钥(我们自己充当CA)
- 创建服务器私钥以生成 CSR
- 使用我们的根 CA 和 CA 私钥创建带有 CSR 的 SSL 证书。
- 在浏览器或操作系统中安装 CA 证书以避免安全警告。
需要我们自己的证书颁发机构
大多数浏览器和操作系统都保存所有受信任的认证机构的根 CA 证书的副本。这就是当您访问使用来自受信任且知名的商业证书颁发机构的 SSL 的标准网站时,浏览器不会显示任何安全消息的原因。
下图显示了Firefox浏览器中默认存在的根 CA。
同时,如果您使用自签名证书,您的浏览器将抛出安全警告。原因是浏览器仅信任来自受信任证书颁发机构的 SSL。例如,
Your connection is not private
Attackers might be trying to steal your information from demo.apps.mlopshub.com (for example, passwords, messages or credit cards)
但您可以强制浏览器和操作系统接受我们自己的证书颁发机构。因此,安装 CA 证书并将其添加到受信任列表后,您将不会看到安全警告。您还可以与您的开发团队共享 CA 证书,以便在他们的浏览器中安装。
此外,您还可以使用此 CA 创建多个 SSL 证书。
创建证书颁发机构
如前所述,我们需要创建自己的根 CA 证书,以便浏览器信任自签名证书。因此,我们首先创建根 CA 证书。
让我们创建一个名为 的目录openssl
来保存所有生成的密钥和证书。
mkdir openssl && cd openssl
执行以下openssl
命令来创建rootCA.key
和rootCA.crt
。替换demo.mlopshub.com
为您的域名或 IP 地址。
openssl req -x509
-sha256 -days 356
-nodes
-newkey rsa:2048
-subj "/CN=demo.mlopshub.com/C=US/L=San Fransisco"
-keyout rootCA.key -out rootCA.crt
我们将使用rootCA.key
和rootCA.crt
来签署 SSL 证书。
注意:如果出现以下错误,请注释 RANDFILE = $ENV::HOME/.rnd
行 /etc/ssl/openssl.cnf
Can't load /home/vagrant/.rnd into RNG
使用 OpenSSL 创建自签名证书
按照下面给出的步骤创建自签名证书。我们将使用在上一步中创建的我们自己的根 CA 注销证书。
1. 创建服务器私钥
openssl genrsa -out server.key 2048
2. 创建证书签名请求配置
我们将创建一个csr.conf
文件来包含生成 CSR 的所有信息。替换demo.mlopshub.com
为您的域名或 IP 地址。
cat > csr.conf <
3. 使用服务器私钥生成证书签名请求 (CSR)
现在我们将server.csr
使用以下命令生成。
openssl req -new -key server.key -out server.csr -config csr.conf
现在我们的文件夹应该有三个文件。csr.conf
,server.csr
和server.key
4. 创建外部文件
执行以下命令来创建cert.conf
SSL 证书。替换demo.mlopshub.com
为您的域名或 IP 地址。
cat > cert.conf <
5.使用自签名CA生成SSL证书
现在,执行以下命令来生成由我们自己的证书颁发机构签名rootCA.crt
并创建的 SSL 证书。rootCA.key
openssl x509 -req
-in server.csr
-CA rootCA.crt -CAkey rootCA.key
-CAcreateserial -out server.crt
-days 365
-sha256 -extfile cert.conf
上面的命令将生成将server.crt
与我们一起使用的命令,server.key
以在应用程序中启用 SSL。
例如,以下配置显示了使用用于 SSL 配置的服务器证书和私钥的 Nginx 配置。
server {
listen 443;
ssl on;
ssl_certificate /etc/ssl/
server.crt
;
ssl_certificate_key /etc/ssl/
server.key
;
server_name your.domain.com;
access_log /var/log/nginx/nginx.vhost.access.log;
error_log /var/log/nginx/nginx.vhost.error.log;
location / {
root /home/www/public_html/your.domain.com/public/;
index index.html;
}
}
在您的浏览器/操作系统中安装证书颁发机构
您需要rootCA.crt
在浏览器或操作系统中安装,以避免使用自签名证书时浏览器中显示安全消息。
安装自签名 CA 证书因操作系统而异。例如,在MAC中,您可以通过双击证书并将其添加到钥匙串来添加证书。检查有关安装证书的相应操作系统指南。
创建自签名证书的 Shell 脚本
如果您想经常创建自签名证书,可以使用以下 shell 脚本。您只需使用要添加到证书的域名或 IP 来执行脚本即可。
将以下 shell 脚本保存为ssl.sh
#! /bin/bash
if [ "$#" -ne 1 ]
then
echo "Error: No domain name argument provided"
echo "Usage: Provide a domain name as an argument"
exit 1
fi
DOMAIN=$1
# Create root CA & Private key
openssl req -x509
-sha256 -days 356
-nodes
-newkey rsa:2048
-subj "/CN=${DOMAIN}/C=US/L=San Fransisco"
-keyout rootCA.key -out rootCA.crt
# Generate Private key
openssl genrsa -out ${DOMAIN}.key 2048
# Create csf conf
cat > csr.conf < cert.conf <
通过执行以下命令设置脚本可执行权限。
chmod x ssl.sh
使用域名或IP执行脚本。例如,
./ssl.sh demo.mlopshub.com
该脚本将创建我们使用individual commands
. SSL 证书和私钥以您作为脚本参数传递的域名命名。例如,demo.mlopshub.com.key
&demo.mlopshub.com.crt
使用自签名证书有什么好处?
使用自签名证书有几个好处:
- 您不需要依赖第三方来签署您的证书。
- 您可以创建并使用自己的证书颁发机构。
- 您无需为 CA 的证书付费。
- 您对您的证书有更多的控制权。
使用自签名证书有哪些缺点?
使用自签名证书也有几个缺点:
- 您的用户需要在其浏览器或应用程序中安装证书。
- 您的用户需要手动信任您的证书颁发机构。
- 它们对于面向公众的应用程序来说是不安全的。
- 除非用户安装,否则任何浏览器或操作系统都不信任自签名证书。
- 容易受到中间人攻击。
一般来说,对于需要证明自己身份的应用程序来说,自签名证书是一个不错的选择。它们也是开发和测试环境的不错选择。但是,它们不应该用于生产应用程序。
组织中的自签名证书
许多组织对其不面向互联网的内部应用程序使用自签名证书。这些证书是使用组织的内部 PKI 基础设施生成的。
DevOps团队和开发人员可以从 PKI 基础设施请求 SSL 证书以在应用程序中使用。
自签名证书常见问题解答
如何在Windows上创建自签名证书?
您可以使用 Openssl在Windows上创建自签名 证书。OpenSSL 命令对于所有操作系统都是相同的。您可以按照本指南在Windows上使用本指南创建自签名 证书。
如何获得自签名证书?
您可以使用 openSSL 或 CDSSL PKI 工具包等工具生成自签名证书。
结论
在本指南中,我们学习了如何使用 OpenSSL创建自签名 SSL 证书。
对于生产用例,如果您不想花钱购买 SSL 证书,可以尝试Letsencrypt。
希望这份自签名 SSL 指南对自动生成证书的脚本有所帮助。如果您遇到任何问题,请告诉我们。
此外,SSL/TLS 是 DevOps 中的重要主题之一。您可以查看如何成为 DevOps 工程师博客以了解更多信息。
via https://devopscube.com/create-self-signed-certificates-openssl/