使用带有示例的openssl生成CSR的简单步骤
如何在Linux中使用openssl生成证书签名请求。
是否可以用openssl生成CSR?
我们可以自动执行创建证书签名请求的步骤,而不是交互式提示吗?
我们是否需要ssl.conf才能使用openssl生成CSR?
配置SSL涉及的步骤
我们可以创建自己的CA证书,也可以向第三方CA发送请求以供应用程序使用证书。
证书最常见的用途之一是在Web服务器上安装SSL证书,以对客户端和服务器之间的通信进行加密。
在上配置SSL或者将证书应用于任何应用程序时,有四个主要步骤:
创建证书签名请求(CSR)
第一步是创建证书请求,也称为证书签名请求(CSR)。
通常,我们导航到CA的以填写Web表单以创建请求或者从实际应用程序创建请求。
例如,Microsoft的IIS和Exchange Server具有创建证书请求的向导。
发出请求后,该请求将存储在文本文件中。我们将使用openssl生成CSR,该CSR也可以提交给第三方CA或者由我们自己的CA证书使用
提交请求
获得CSR后,就可以将请求(CSR的内容)提交给CA了。
对于第三方CA,我们可以通过导航到CA来实现。
如果我们使用自己的CA,则可以使用openssl来完成
下载证书
通过提交第三方CA的请求后,我们需要将生成的证书下载到计算机上。
通常,在"提交请求"阶段的末尾会提供一个链接,以下载证书。
在执行结束时使用openssl,我们将根据提供的路径获得证书。
安装证书
- 获得证书后,可以将其安装在应用程序中。
第三方CA列表
以下是一些证书颁发机构:
CertiSign(巴西,VeriSign的一部分)
Entrust
IKS GmbH(德国)
Thawte(VeriSign的一部分)
VeriSign
所有这些都接受由mod_ssl软件包生成的证书签名请求,以与Apache与mod_ssl一起使用。
什么是证书签名请求(CSR)?
制作服务器密钥文件和证书时,还会发出证书签名请求。
证书颁发机构将使用CSR创建SSL证书,但不需要私钥。
此请求所需的信息必须与证书颁发机构要求的名称,注册域名和其他详细信息完全匹配,以便他们处理请求。
名称必须与服务器的FQDN匹配,否则证书将引发名称不匹配错误或者TLS握手失败
CSR还包括许多其他与我们要为其申请证书的组织有关的详细信息
该文件将自动以特殊格式编码。
准备工作
希望我们对openssl和使用证书的不同术语有所了解。
由于我使用的是Linux环境,因此我将使用openssl为本教程生成私钥和CSR。
默认情况下,openssl已安装在更多Linux发行版中。
我们可以使用验证相同
# rpm -q openssl openssl-1.1.1c-2.el8.x86_64
如果尚未安装,则可以根据发行版安装openssl软件包。
我正在使用RHEL/CentOS,因此将使用yum安装opensll。
对于Ubuntu,Debian,我们可以使用apt-get
# yum -y install openssl
重要的提示:
确保保留将随CSR生成的私钥。
CSR仅可与此私钥一起使用。
生成CSR(交互式)
在此示例中,我将显示交互式方法,这意味着将提示我们填写CSR所需的数据。
要生成证书签名请求,我们将需要一个私钥。
理想情况下,我将使用两个不同的命令分别生成每个命令,但是其中将介绍单个命令来生成私钥和CSR
# openssl req -new -newkey rsa:2048 -nodes -keyout ban27.key -out ban27.csr
在此示例中,我们使用RSA算法和2048位大小创建一个私钥(ban27.key
)。
接下来,我们将使用此ban27.key
生成我们的CSR(ban27.csr
)
提示:
此处私钥未加密,如果我们希望拥有加密的私钥,则可以从此命令中删除-nodes
,该命令将提示我们为私钥添加密码短语
我的终端在此命令中的摘要输出
生成CSR(交互式)
其中
-newkey:
这个选项创建一个新的证书请求和一个新的私钥。rsa:2048:
生成2048位大小的RSA密钥-nodes:
私钥将被创建而不进行任何加密-keyout:
这给出了将新创建的私钥写入的文件名-out:默认指定要写入的输出文件名或者标准输出。
这样就创建了我们的密钥和CSR:
# ls -l ban27.* -rw-r--r-- 1 root root 1078 Aug 10 08:21 ban27.csr -rw------- 1 root root 1704 Aug 10 08:20 ban27.key
生成CSR(非交互式)
在此示例中,我将共享非交互式方法来生成CSR,这意味着不会提示我们输入任何内容。
创建具有生成CSR所需内容的配置文件。
我创建了一个示例文件,我们可以将其用作模板。
# cat server_cert.cnf [req] distinguished_name = req_distinguished_name prompt = no [req_distinguished_name] C = IN ST = Karnataka L = Bengaluru O = theitroad OU = R&D CN = ban27.example.com
接下来,我们将使用与之前相同的命令,并添加-config server_cert.cnf以确保不提示我们输入任何内容。
# openssl req -new -newkey rsa:2048 -nodes -keyout server.key -out ban27.csr -config server_cert.cnf
如预期的那样,该命令未提示任何输入。
我们可以将其用于自动化目的。
以下是我的终端的摘录
生成CSR(非交互式)
验证证书签名请求
现在,由于有了CSR,我们将验证证书的内容。
# openssl req -noout -text -in ban27.csr Certificate Request: Data: Version: 1 (0x0) Subject: C = IN, ST = Karnataka, L = Bengaluru, O = theitroad, OU = R&D, CN = ban27.example.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public-Key: (2048 bit) Modulus: 00:b9:de:b9:d5:6a:36:77:1e:72:76:28:09:5e:d5: 61:17:60:fc:ed:4d:b2:22:61:5d:24:16:88:6d:89: b5:ae:45:74:1f:39:f0:4f:bc:1c:07:f2:82:d6:4b: 10:29:05:15:e2:78:26:2c:82:e1:5e:c7:54:8f:94: eb:d0:79:80:43:d0:d8:9e:04:88:d6:d3:4c:c0:25: 61:f8:67:98:fb:17:cd:35:e5:d9:1f:d0:6f:83:2f: a2:82:9f:1d:aa:77:4f:7f:e8:50:ea:80:96:7d:31: a9:c3:16:6a:30:7e:8f:52:5a:8c:b6:62:97:d6:84: 17:19:f4:1c:95:39:94:c0:81:86:25:9b:85:50:65: c6:39 Exponent: 65537 (0x10001) Attributes: a0:00 Signature Algorithm: sha256WithRSAEncryption 51:81:12:53:22:8e:92:3c:c0:7c:b6:dc:cc:ff:63:35:6a:24: 2d:3e:f2:1f:d0:df:bf:c8:73:02:ea:19:d5:ff:2d:b5:78:3d: b4:a7:43:3c:96:92:25:62:83:b1:9e:8c:81:33:92:0c:1f:83: 6e:50:bd:cd:69:2c:32:a9:9f:12:43:f8:de:6f:28:d1:4c:3d: 2e:b7:ac:f4:50:15:22:e2:5c:21:22:c9:e9:bc:e5:d2:f9:49: 10:c5:87:58:60:a1:da:64:aa:55:b6:06:2f:29:31:4e:b6:a7: b6:11:dd:31:ed:7c:32:dd:f3:2f:2f:0a:e3:37:b0:f4:b1:86: