OpenSSL命令速查手册:证书、私钥与证书签名请求文件

栏目: 编程工具 · 发布时间: 6年前

内容简介:OpenSSL是一个功能极其强大的命令行工具,可以用来完成公钥体系(如果你要从证书颁发机构(CA)获取一个SSL证书,那首先需要先生成一个证书签名请求(CSR)。 CSR的主要内容是密钥对中的公钥,以及一些额外的信息 —— 这些内容都将在签名时插入到 证书里。当使用openssl生成证书签名请求时,需要输入证书的唯一标识信息(

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

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

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

当使用openssl生成证书签名请求时,需要输入证书的唯一标识信息( D istinguished _N__ame), 其中重要的一项是常见名( C ommon N ame),它应当是你要部署证书的主机的 域名全称(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 选项。例如:

If you want to non-interactively answer the CSR information prompt, you can do so by adding the -subj option to any OpenSSL commands that request CSR information. Here is an example of the option, using the same information displayed in the code block above:

-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 文件中将包含所有条目。

原文链接: OpenSSL Essentials: Working with SSL Certificates, Private Keys and CSRs

汇智网翻译整理,转载请标明出处


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

HTML5

HTML5

Matthew David / Focal Press / 2010-07-29 / USD 39.95

Implement the powerful new multimedia and interactive capabilities offered by HTML5, including style control tools, illustration tools, video, audio, and rich media solutions. Understand how HTML5 is ......一起来看看 《HTML5》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

MD5 加密
MD5 加密

MD5 加密工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具