专栏首页汇智网教程OpenSSL常用命令手册

OpenSSL常用命令手册

OpenSSL是一个功能极其强大的命令行工具,可以用来完成公钥体系(Public Key Infrastructure)及HTTPS相关的很多任务。这个速查手册整理了常用的OpenSSL命令的使用方法,例如生成私钥、生成证书签名请求以及证书格式转换等。

序:关于证书签名请求(CSR)

如果你要从证书颁发机构(CA)获取一个SSL证书,那首先需要先生成一个证书签名请求(CSR)。CSR的主要内容是密钥对中的公钥,以及一些额外的信息 —— 这些内容都将在签名时插入到证书里。

当使用openssl生成证书签名请求时,需要输入证书的唯一标识信息(Distinguished Name),其中重要的一项是常见名(Common Name),它应当是你要部署证书的主机的域名全称(FQDN)。

DN中的其他条目用来提供关于你的机构的额外信息。如果你在从证书颁发机构购买SSL证书,那么通常也需要这些额外的字段,例如组织机构(Organization),以便能够真实地展示你的机构详情。

下面是CSR的模样:

Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:New York
Locality Name (eg, city) []:Brooklyn
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Example Brooklyn Company
Organizational Unit Name (eg, section) []:Technology Division
Common Name (e.g. server FQDN or YOUR name) []:examplebrooklyn.com
Email Address []:

也可以非交互方式提供生成CSR时要求的信息,任何需要CSR信息的OpenSSL命令都可以添加 -subj选项。例如:

-subj "/C=US/ST=New York/L=Brooklyn/O=Example Brooklyn Company/CN=examplebrooklyn.com"

一、生成证书签名请求

这一部分涵盖与生成CSR(以及私钥)相关的OpenSSL命令。CSR可以用来从证书颁发机构 请求SSL证书。

记住,你可以交互式的添加CSR信息,也可以使用-subj选项以非交互的方式添加同样的信息。

1.1 生成私钥和CSR

如果你需要使用HTTPS来加固你的web服务器,那么你会向证书颁发机构申请一个证书。这里 生成的CSR可以发送给CA来发行其签名的SSL证书。

下面的命令创建一个2048位的私钥(domain.key)以及一个CSR(domain.csr):

openssl req \
       -newkey rsa:2048 -nodes -keyout domain.key \
       -out domain.csr

这里需要交互地输入CSR信息,以便完成整个过程。

-newkey rsa:2048选项声明了使用RAS算法生成2048位的私钥。-nodes选项表明我们不使用密码加密私钥。上面隐含了-new选项,表示要生成一个CSR。

1.2 使用已有私钥生成CSR

如果你已经有了一个私钥,那么可以直接用它来向CA申请证书。

下面的命令使用一个已有的私钥(domain.key)创建一个新的CSR(domain.csr):

openssl req \
       -key domain.key \
       -new -out domain.csr

-key选项用来指定已有的私钥文件,-new选项表明我们要生成一个CSR。

1.3 使用已有的证书和私钥生成CSR

如果你需要续订已有的证书,但你和CA都没有原始的CSR,那可以再次生成CSR。

例如,下面的命令使用已有的证书(domain.crt)和私钥(domain.key)创建一个新的CSR:

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

-x509toreq选项表明我们要使用X509证书来制作CSR。

二、生成SSL证书

如果你只是想用SSL证书加固你的web服务器,但是并不需要CA签名的证书,那么一个简单的方法是自己签发证书。

一种常见的你可以签发的类型是自签名证书 —— 使用自己的私钥签发的证书。自签名证书可以向CA签发的证书一样用于加密数据,但是你的用户将收到提示说明该证书不被其计算机或浏览器信息。因此,自签名证书只能在不需要向用户证明你的身份时使用,例如非生产环境或者非公开服务。

这一部分的内容涵盖自签名证书生成相关的OpenSSL命令。

2.1 生成自签名证书

如果你需要使用HTTPS加固服务器,但不需要CA签发的证书,就可以使用自签名证书。

下面的命令创建一个2048位的私钥(domain.key)以及一个自签名证书(domain.crt):

openssl req \
       -newkey rsa:2048 -nodes -keyout domain.key \
       -x509 -days 365 -out domain.crt

-x509选项指出我们要创建自签名证书,-days 365选项声明该证书的有效期为365天。在上面的命令执行过程中将创建一个临时CSR来收集与证书相关的CSR信息。

2.2 使用已有私钥生成自签名证书

也可以使用已有私钥来生成自签名证书。例如,下面的命令使用已有的私钥(domain.key)生成一个自签名证书(domain.crt):

openssl req \
       -key domain.key \
       -new \
       -x509 -days 365 -out domain.crt

-new选项用来启动CSR信息采集提示。

2.3 使用已有的私钥和CSR生成自签名证书

第三种办法是使用已有的私钥和CSR来生成自签名证书。例如,下面的命令使用私(domain.key)和CSR(domain.csr)创建一个自签名证书(domain:crt):

openssl x509 \
       -signkey domain.key \
       -in domain.csr \
       -req -days 365 -out domain.crt

三、查看证书

证书和CSR文件都采用PEM编码格式,并不适合人类阅读。这一部分主要介绍OpenSSL中查看PEM编码文件的命令。

3.1 查看CSR条目

下面的命令可以查看CSR文件的明文文本并进行验证:

openssl req -text -noout -verify -in domain.csr

3.2 查看证书条目

下面的命令可以查看证书文件的明文文本:

openssl x509 -text -noout -in domain.crt

3.3 验证证书是否由CA签发

下面的命令用来验证证书doman.crt是否由证书颁发机构(ca.crt)签发:

openssl verify -verbose -CAFile ca.crt domain.crt

四、私钥生成与验证

这部分介绍与私钥生成和验证相关的OpenSSL命令。

4.1 创建私钥

下面的命令创建一个密码保护的2048位私钥domain.key:

openssl genrsa -des3 -out domain.key 2048

上面命令会提示输入密码。

4.2 验证私钥

下面的命令可以验证私钥domain.key是否有效:

openssl rsa -check -in domain.key

如果私钥是加密的,命令会提示输入密码,验证密码成功则会显示不加密的私钥。

4.3 验证私钥与证书和CSR匹配

使用下面的命令验证私钥domain.key是否与证书domain.crt以及CSR匹配:

openssl rsa -noout -modulus -in domain.key | openssl md5
openssl x509 -noout -modulus -in domain.crt | openssl md5
openssl req -noout -modulus -in domain.csr | openssl md5

如果上面三个命令的输出一致,那么有极高的概率可以认为私钥、证书和CSR是相关的。

4.4 加密私钥

下面的命令将私钥unencrypted.key加密,输出加密后的私钥encrypted.key:

openssl rsa -des3 \
       -in unencrypted.key \
       -out encrypted.key

上面命令执行时会提示设置密码。

4.5 解密私钥

下面的命令将加密私钥encrypted.key解密,并输出明文结果:

openssl rsa \
       -in encrypted.key \
       -out decrypted.key

上面命令执行时会提示输入解密密码。

五、证书格式转换

我们之前接触的证书都是X.509格式,采用ASCII的PEM编码。还有其他一些证书编码格式与容器类型。OpenSSL可以用来在众多不同类型之间转换证书。这一部分主要介绍与证书格式转换相关的OpenSSL命令。

5.1 PEM转DER

可以将PEM编码的证书domain.crt转换为二进制DER编码的证书domain.der:

openssl x509 \
       -in domain.crt \
       -outform der -out domain.der

DER格式通常用于Java。

5.2 DER转PEM

同样,可以将DER编码的证书(domain.der)转换为PEM编码(domain.crt):

openssl x509 \
       -inform der -in domain.der \
       -out domain.crt

5.3 PEM转PKCS7

可以将PEM证书(domain.crt和ca-chain.crt)添加到一个PKCS7(domain.p7b)文件中:

openssl crl2pkcs7 -nocrl \
       -certfile domain.crt \
       -certfile ca-chain.crt \
       -out domain.p7b

使用-certfile选项指定要添加到PKCS7中的证书。

PKCS7文件也被称为P7B,通常用于Java的Keystore和微软的IIS中保存证书的ASCII文件。

5.4 PKCS7转换为PEM

使用下面的命令将PKCS7文件(domain.p7b)转换为PEM文件:

openssl pkcs7 \
       -in domain.p7b \
       -print_certs -out domain.crt

如果PKCS7文件中包含多个证书,例如一个普通证书和一个中间CA证书,那么输出的PEM文件中将包含所有的证书。

5.5 PEM转换为PKCS12

可以将私钥文件(domain.key)和证书文件(domain.crt)组合起来生成PKCS12 文件(domain.pfx):

openssl pkcs12 \
       -inkey domain.key \
       -in domain.crt \
       -export -out domain.pfx

上面的命令将提示你输入导出密码,可以留空不填。

PKCS12文件也被称为PFX文件,通常用于导入/导出微软IIS中的证书链。

5.6 PKCS12转换为PEM

也可以将PKCS12文件(domain.pfx)转换为PEM格式(domain.combined.crt):

openssl pkcs12 \
       -in domain.pfx \
       -nodes -out domain.combined.crt

注意如果PKCS12文件中包含多个条目,例如证书及其私钥,那么生成的PEM文件中将包含所有条目。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 为什么采用HTTPS是如此重要

    随着越来越多的数据泄露事件被披露,网络安全和隐私问题成为信息安全的雷区。从而迫使越来越多人放弃标准的HTTPS协议,使用更安全的HTTPS安全加密协议。

    迅达集团
  • HTTP和HTTPS的区别

      HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。

    SuperHeroes
  • AFNetworking框架分析(六)——AFSecurityPolicy

    在AF框架中,AFSecurityPolicy类只做了一件事,就是完成HTTPS认证。作为单向认证证书是否合法。 先来看看HTTP协议,超文本传输协议。目前使...

    我只不过是出来写写代码
  • 申请免费的腾讯云SSL证书实现https访问教程

    本教程教你免费申请腾讯的1年免费使用的SSL证书。腾讯云SSL证书是免费使用的可以尝试一下,已经收录的站需要在站长平台开启网站改版规则,不然会影响优化

    主机优惠教程
  • 部署SSL后,为何网站还是显示不安全?

    漫漫长夜,实在是无聊至极(ps.请忽视这个所谓的节日),正好近期遇到有些朋友问我关于SSL证书部署后的问题,又正好前天我遇到了这个问题。关于为什么部署了SSL证...

    乐网网络
  • 使用Certify来自动申请并配置Let’s Encrypt免费SSL证书到IIS8

    越来越多的网站在启用HTTPS,也就是SSL加密通讯连接访问。特别是去年开始BAT在国内的推广和应用要求。要知道部署发布一个苹果iOS企业应用,下载服务器就必须...

    崔文远TroyCui
  • Tomcat 安装SSL证书 原

    登录GetSSL会员中心, 点击左侧 【 SSL证书管理】, 点击 【查看订单】 ,【下载SSL证书】。选择Tomcat格式, 输入密码 并点击下载。

    拓荒者
  • 【手记】解决“未能创建 SSL/TLS 安全通道”异常

    之前写了一个桌面程序,程序会间歇性访问某个https接口,一直用的好好的,今天突然报错了,异常就发生在访问接口的地方,曰“请求被中止,未能创建 SSL/TLS ...

    AhDung
  • SL加密技术:数据传输的网络安全使者

    SSL协议是目前全球等级较高的加密安全协议,为网络传输提供加密安全通道,保护信息传递安全。

    迅达集团

扫码关注云+社区

领取腾讯云代金券