OpenSSL是一个CLI(命令行工具),可用于保护服务器以生成公共密钥基础结构(PKI)和HTTPS。本文可帮助您快速了解OpenSSL命令,这些命令对于常见情况以及日常情况(特别是对于系统管理员)非常有用。
如果要从证书颁发机构(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证书。
如果我们想使用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文件。
$ 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将使用我们拥有的.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的一些基本功能。