如何使用openssl生成SSL证书私钥和csrs

OpenSSL是一个CLI(命令行工具),可用于保护服务器以生成公共密钥基础结构(PKI)和HTTPS。本文可帮助您快速了解OpenSSL命令,这些命令对于常见情况以及日常情况(特别是对于系统管理员)非常有用。

证书签名请求(CSR)

如果要从证书颁发机构(CA)获取SSL证书,则必须生成一个证书签名请求(CSR)。CSR主要由密钥对的公钥和一些其他信息组成。每当我们签署CSR时,这两个组件都会合并到证书中。

在生成CSR时,系统将提示您输入有关证书的信息,该信息称为专有名称(DN)。DN中的重要字段是通用名称(CN),它应该是我们要与证书一起使用的服务器或主机的FQND(完全限定域名)。

DN中的下一项是提供有关我们的业务或组织的其他信息。如果我们从证书颁发机构(CA)购买SSL证书,则非常重要,并要求这些附加字段(如“组织”)应反映您的组织的详细信息。

这是当我们运行OpenSSL命令生成CSR时CSR信息提示的一般示例。

Country Name (2 letter code) [US]:IN
State or Province Name (full name) [Some-State]:Telengana
Locality Name (eg, city) []:Hyderabad
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Ansole Pvt Ltd.
Organizational Unit Name (eg, section) []:Application
Common Name (e.g. server FQDN or YOUR name) []:domainname.com
Email Address []:support@domainname.com

我们还可以通过非交互式答案为CSR信息生成提供信息,我们可以通过在尝试生成或运行的任何OpenSSL命令中添加–subj选项来实现此目的。

以下是–subj选项的示例,我们可以在其中提供要使用此CSR的组织的信息。

-subj "/C=IN/ST=Telengana/L=Hyderabad/O=Ansole Pvt Ltd/CN=domainname.com"

产生企业社会责任

在本节中,我们将介绍与生成CSR相关的OpenSSL命令。此CSR可用于从证书颁发机构请求SSL证书。

生成私钥和CSR

如果我们想使用HTTPS(基于TLS的HTTP)来保护Apache或Nginx Web服务器(使用证书颁发机构(CA)颁发SSL证书)。同样,我们将要生成的“ .CSR”必须发送到CA,以请求获得CA签名的SSL的证书。

下面是从头开始为“ domain.key”和CSR“ domain.csr”创建2048位私钥的命令。

$ openssl req -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr
Generating a 2048 bit RSA private key
..............................+++
.......................................+++
writing new private key to 'domain.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:IN
State or Province Name (full name) [Some-State]:Telengana
Locality Name (eg, city) []:Hyderabad
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Ansol Pvt Ltd
Organizational Unit Name (eg, section) []:Application
Common Name (e.g. server FQDN or YOUR name) []:domainname.com
Email Address []:support@domainname.com

“ –newkey rsa:2048”是我们指定的选项,使用RSA算法,密钥应为2048位。“ –nodes”选项用于指定私钥不应使用密码短语进行加密。“ -new”选项表示正在生成CSR。

从现有私钥生成CSR

在这里,我们将了解如何生成具有私钥的CSR。

下面的命令基于我们已经拥有的私钥创建一个新的.csr文件。

$ openssl req -key domain.key -new -out domain.csr
You are about to be asked to enter information that will be incorporated into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:IN
State or Province Name (full name) [Some-State]:Telengana
Locality Name (eg, city) []:Hyderabad
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Ansol Pvt Ltd
Organizational Unit Name (eg, section) []:Applicatoin
Common Name (e.g. server FQDN or YOUR name) []:domainname.com
Email Address []:support@domainname.com

从现有证书和私钥生成CSR

在这里,我们可以生成或更新现有证书,由于某些原因,我们会在其中丢失CSR文件。在这里,CSR将使用我们拥有的.CRT文件提取信息。

以下是生成示例–

$ openssl x509 in domain.crt-signkey domain.key -x509toreq -out domain.csr

在指定-x509toreq的位置,我们正在使用x509证书文件进行CSR。

生成自发证书

在这里,我们将生成证书,以保护Web服务器的安全,在此我们使用自签名证书来进行开发和测试。

$ openssl req -newkey rsa:2048 -nodes -keyout domain.key-x509 -days 365 -out domain.crt
Generating a 2048 bit RSA private key
................+++
.......................................................+++
writing new private key to 'domain.key'
-----
You are about to be asked to enter information that will be incorporated into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:IN
State or Province Name (full name) [Some-State]:Telengana
Locality Name (eg, city) []:Hyderabad
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Ansol Pvt Ltd
Organizational Unit Name (eg, section) []:Application
Common Name (e.g. server FQDN or YOUR name) []:domainname.com
Email Address []:support@domainname.com

在这里,我们使用–x509选项生成自签名证书,使用–days 365生成有效期为365天的证书,并使用上述信息生成临时的.CSR文件。

查看证书文件

请注意,CSR文件以.PEM格式编码(人类无法读取)。这是查看证书所必需的。在本节中,我们将介绍使用.PEM文件编码的OpenSSL命令。

查看企业社会责任文件

以下命令将用于以纯文本格式查看.CRT文件Ex(domain.crt)的内容。

$ sudo openssl x509 -text -noout -in domain.crt
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 9717655772991591277 (0x86dc0c706eb0136d)
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=IN, ST=Telengana, L=Hyderabad, O=Ansol Pvt Ltd, OU=Application , CN=domainname.com/emailAddress=support@domainname.com
Validity
Not Before: Jun 13 14:23:52 2016 GMT
Not After : Jun 13 14:23:52 2017 GMT
Subject: C=IN, ST=Telengana, L=Hyderabad, O=Ansol Pvt Ltd, OU=Applicatio n, CN=domainname.com/emailAddress=support@domainname.com
….

使用私钥

在本节中,将了解如何使用特定于创建和验证私钥的OpenSSL命令。

创建一个私钥

以下是用于创建受密码保护的2048位加密私钥文件(例如domain.key)的命令-

$ openssl genrsa -des3 -out domain.key 2048

当提示您完成过程时,输入密码。

验证私钥

以下是检查我们生成的私钥(例如:domain.key)是否为有效密钥的命令 

$ openssl rsa -check -in domain.key

如果私钥已加密,将提示您输入密码。成功输入后,未加密的密钥将成为终端上的输出。

在本文中,我们了解了一些处理OpenSSL具有很多功能的SSL证书的命令和OpenSSL命令的用法。将来我们将学习更多功能和用法。我希望本文能帮助我们了解OpenSSL的一些基本功能。