此备忘单式指南提供了在常见日常场景中有用的OpenSSL 命令的快速参考。
来源:https://linux.cn/article-12293-1.html 作者:Mitchell Anicas 译者:Xingyu.Wang
介绍
OpenSSL 是一个公钥基础设施(PKI)和HTTPS(HTTP over TLS)相关的任务。这个备忘单风格的指南提供了在常见日常场景中有用的OpenSSL 命令的快速参考。它包括用于私钥生成、证书签名请求(CSR) 和证书格式转换的OpenSSL 示例,但不涵盖OpenSSL 的所有用途。
如何使用本指南
如果您不熟悉证书签名请求(CSR),请阅读第1 部分。除了第一部分之外,本指南采用简单的备忘单格式,并带有命令行代码片段。导航到与您准备完成的任务相关的任何部分。大多数命令都是单行,但为了清晰起见,会扩展到多行(使用\ 符号)。
关于证书签署请求(CSR)
如果您从证书颁发机构(CA) 获取SSL 证书,则必须生成证书签名请求(CSR)。 CSR 主要由密钥对的公钥和一些附加信息组成。签名时,这两个部分都会插入到证书中。
每次生成CSR 时,系统都会提示您输入有关证书的信息。此信息称为专有名称(DN)。 DN 中的一个重要字段是通用名称(CN)。这必须是使用证书的主机的完全限定域名(FQDN)。创建CSR 时,您还可以通过命令行或文件传递信息以绕过交互式提示。
DN 中的其他项目提供有关您的业务或组织的附加信息。从证书颁发机构购买SSL 证书时,通常需要这些附加字段(例如组织)才能准确反映组织的详细信息。
以下是CSR 消息的示例:
---国家名称(两个字母代码) [AU]: 美国州名称(全名) [Some-State]: 纽约市名称(例如城市) []: 布鲁克林组织名称(例如公司) [Internet Widgits Pty Ltd] :示例布鲁克林公司组织单位名称(示例:部门)[]:技术部门通用名称(示例:服务器FQDN 或客户名称)[]:examplebrooklyn.com电子邮件地址[]:CSR 如果您想以非交互方式响应信息提示,您可以请求CSR通过以下方式:这是通过将-subj 选项添加到OpenSSL 命令来完成的。以下是此选项的示例,使用上面代码块中显示的相同信息。
-subj '/C=US/ST=New York/L=Brooklyn/O=Example Brooklyn Company/CN=examplebrooklyn.com' 既然您了解了CSR,请转到本指南中涵盖您的OpenSSL 需求的任何部分。继续移动。
生成 CSR
本节介绍与生成CSR(以及私钥,如果尚不存在)相关的OpenSSL 命令。您可以使用CSR 向证书颁发机构请求SSL 证书。
请注意,您可以使用上一节中描述的-subj 选项以非交互方式添加CSR 信息。
生成私钥和CSR
如果您想要使用HTTPS(基于TLS 的HTTP)保护Apache HTTP 或Nginx Web 服务器并使用证书颁发机构(CA) 颁发SSL 证书,请使用此方法。您可以将生成的CSR 提交给CA,请求颁发由CA 签名的SSL 证书。如果您的CA 支持SHA-2,请添加-sha256 选项以使用SHA-2 签署CSR。
此命令从头开始创建2048 位私钥(domain.key) 和CSR (domain.csr)。
openssl req \ -newkey rsa:2048 -nodes -keyout domain.key \ -out domain.csr 回答CSR 信息问题以完成该过程。
选项-newkey rsa:2048 指定密钥必须是使用RSA 算法生成的2048 位。选项-nodes 指定私钥不使用密码加密。此处不包含-new 选项,但隐式包含该选项以指示正在生成CSR。
从现有私钥生成CSR
如果您已经拥有私钥并希望使用它向CA 申请证书,请使用此方法。
此命令根据现有私钥(domain.key) 创建新的CSR (domain.csr)。
openssl req \ -key domain.key \ -new -out domain.csr 回答CSR 信息问题以完成该过程。
选项-key 指定用于生成新CSR 的现有私钥(domain.key)。选项-new 指示正在生成CSR。
从现有证书和私钥生成CSR
如果您想要续订现有证书,但由于某种原因您或您的CA 没有原始CSR,请使用此方法。它本质上是从您现有的证书中提取信息,从而使您无需重新输入CSR 信息。
此命令根据现有证书(domain.crt) 和私钥(domain.key) 创建新的CSR (domain.csr)。
openssl x509 \ -indomain.crt\-signkeydomain.key\-x509toreq -outdomain.csr 可选-x509toreq 指定使用X509 证书创建CSR。
生成 SSL 证书
如果您想使用SSL 证书保护您的服务,但不需要CA 签名的证书,有效(且免费)的解决方案是签署您自己的证书。
您可以自行颁发的一种常见证书类型是自签名证书。自签名证书是使用您自己的私钥签名的证书。自签名证书可用于加密数据,就像CA 签名证书一样,但用户会收到一条警告,表明其计算机或浏览器不信任该证书。因此,仅当您不需要向用户证明服务身份时(例如在非生产服务器或私有服务器上),才使用自签名证书。
本节介绍与生成自签名证书相关的OpenSSL 命令。
生成自签名证书
如果您需要使用HTTPS(基于TLS 的HTTP)保护Apache HTTP 或Nginx Web 服务器,并且证书不需要由CA 签名,请使用此方法。
此命令从头开始创建2048 位私钥(domain.key) 和自签名证书(domain.crt)。
openssl req \ -newkey rsa:2048 -nodes -keyout domain.key \ -x509 -days 365 -out domain.crt 回答CSR 信息问题以完成该过程。
选项-x509 告诉req 子命令创建自签名证书。 -days 365 选项指定证书的有效期为365 天。生成临时CSR 以收集证书相关信息。
从现有私钥生成自签名证书
如果您已经拥有私钥并希望使用它来生成自签名证书,请使用此方法。
此命令根据现有私钥(domain.key) 创建自签名证书(domain.crt)。
openssl req \ -key domain.key \ -new \ -x509 -days 365 -out domain.crt 回答CSR 信息问题以完成该过程。
选项-x509 告诉req 子命令创建自签名证书。 -days 365 选项指定证书的有效期为365 天。选项-new 启用CSR 信息问题。
从现有私钥和CSR 生成自签名证书
如果您已经拥有私钥和CSR 并且想要使用它们生成自签名证书,请使用此方法。
此命令根据现有私钥(domain.key) 和(domain.csr) 创建自签名证书(domain.crt)。
openssl x509 \ -signkey domain.key \ -in domain.csr \ -req -days 365 -out domain.crt 选项-days 365 指定证书的有效期为365 天。
查看证书
证书和CSR 文件以PEM 格式编码,不适合人类阅读。
本节中描述的OpenSSL 命令输出PEM 编码文件中的实际条目。
查看企业社会责任条目
此命令允许您查看和验证纯文本CSR (domain.csr) 的内容。
openssl req \ -text -noout -verify \ -in domain.csr 查看证书条目
此命令允许您查看纯文本证书(domain.crt) 的内容。
openssl x509 \ -text -noout \ -in domain.crt 验证证书是否由CA 签名
使用以下命令验证证书(domain.crt) 是否由特定CA 证书(ca.crt) 签名:
openssl verify \ -verbose -CAFile ca.crt \domain.crt
私钥
本节介绍用于创建和验证私钥的OpenSSL 命令。
创建私钥
使用以下命令创建受密码保护的2048 位私钥(domain.key):
openssl genrsa \ -des3 -out domain.key 2048 当提示完成该过程时,输入密码。
验证私钥
使用以下命令检查私钥(domain.key)是否是有效密钥:
openssl rsa \ -check -domain.key 如果私钥已加密,则成功会将未加密的密钥打印到终端。
验证私钥是否与证书和CSR 匹配。
使用以下命令验证私钥(domain.key) 是否与证书(domain.crt) 和CSR (domain.csr) 匹配:
如果openssl rsa-noout -modulus -in domain.key | openssl md5openssl x509 -noout -modulus -in domain.crt | openssl md5openssl req-noout -modulus -in domain.csr | 的输出,私钥、证书和CSR很可能是相关的。
加密私钥
这将获取未加密的私钥(unencrypted.key) 并打印其加密版本(encrypted.key)。
openssl rsa -des3 \ -in unencrypted.key \ -out crypto.key 输入加密私钥所需的密码。
解密私钥
这需要加密的私钥(encrypted.key) 并输出解密版本(decrypted.key)。
openssl rsa \ -inencrypted.key \ -outdecrypted.key 出现提示时,输入加密密钥的密码。
转换证书格式
我们使用的所有证书都是ASCII PEM 编码的X.509 证书。还有许多其他证书编码和容器类型,您的应用程序可能更喜欢一种格式而不是另一种格式。此外,其中许多格式允许将多个项目(例如私钥、证书和CA 证书)包含在单个文件中。
您可以使用OpenSSL 在Zexi 格式之间转换证书。本节描述一些可能的转换。
转换PEM 为DER
如果要将PEM 编码的证书(domain.crt) 转换为DER 编码的证书(domain.der),即二进制格式,请使用以下命令:
openssl x509 \ -in domain.crt \ -outform der -out domain.der DER 格式在Java 中常用。
DER 到PEM 转换
如果要将DER 编码的证书(domain.der) 转换为PEM 编码的证书(domain.crt),请使用以下命令:
openssl x509 \ -inform der -in domain.der \ -out domain.crt 将PEM 转换为PKCS7
如果要将PEM 证书(domain.crt 和ca-chain.crt)添加到PKCS7 文件(domain.p7b),请使用以下命令:
openssl crl2pkcs7 -nocrl\-certfiledomain.crt\-certfile ca-chain.crt\-outdomain.p7b请注意,您可以使用一个或多个-certfile 选项来指定要添加到PKCS7 文件的证书。
PKCS7 文件,也称为P7B,通常用于Java 密钥库和Microsoft IIS (Windows)。这些是可以包含证书和CA 证书的ASCII 文件。
将PKCS7 转换为PEM
如果要将PKCS7 文件(domain.p7b) 转换为PEM 文件,请使用以下命令:
openssl pkcs7 \ -indomain.p7b\-print_certs -outdomain.crt 如果PKCS7 文件有多个项目(例如证书或CA 中间证书),则生成的PEM 文件将包含其中的所有项目,请特别注意。
将PEM 转换为PKCS12
如果要获取私钥(domain.key)和证书(domain.crt)并将它们组合成PKCS12文件(domain.pfx),请使用以下命令:
openssl pkcs12 \ -inkeydomain.key\-indomain.crt\-export -outdomain.pfx 系统将提示您输入导出密码,但您可以安全地将其留空。请注意,在这种情况下,您可以通过将多个证书连接到一个PEM 文件(domain.crt) 中,将证书链添加到PKCS12 文件中。
PKCS12 文件也称为PFX 文件,通常用于在Microsoft IIS (Windows) 中导入和导出证书链。
将PKCS12 转换为PEM
如果要将PKCS12 文件(domain.pfx) 转换为PEM 格式(domain.combined.crt),请使用以下命令:
openssl pkcs12 \ -in domain.pfx \ -nodes -out domain.combined.crt 如果PKCS12 文件具有多个项目(例如证书和私钥),则生成的PEM 文件将包含以下所有项目: 请注意它被包括在内。那。
OpenSSL 版本
您可以使用openssl version 命令检查正在运行的版本。您正在运行的OpenSSL 版本以及编译时使用的选项会影响您可用的功能(在某些情况下还包括命令行选项)。
以下命令显示您正在运行的OpenSSL 版本以及编译它时使用的所有选项。
openssl version -a 本指南是使用OpenSSL 二进制文件创建的(请参阅上一个命令的输出),并具有以下详细信息:
OpenSSL 1.0.1f 于2014 年1 月6 日在: 4 月7 日构建21:22:23 UTC 2014platform: debian-amd64options:bn(64,64) rc4(16x,int) des(idx,cisc,16,int) bullfish(idx)compiler33 360cc - fPIC - DOPENSSL_PIC - DOPENSSL_THREADS - D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -m64 -DL_ENDIAN -DTERMIO -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 - Wl,-Bsymbolic-函数- Wl,-z,relro -Wa,--noexecstack -Wall -DMD32_REG_T=int -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_A SM -DMD5_ASM -DAES _AS M -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASMOPENSSLDIR: '/usr/lib/ssl'
总结
这应该涵盖大多数人如何使用OpenSSL 处理SSL 证书。还有许多其他用途此处未涵盖,因此请随时在评论中询问或建议其他用途。
如果您在使用这些命令时遇到任何问题,请务必发表评论(并包含您的OpenSSL 版本的输出)。
via: https://www.digitalocean.com/community/tutorials/openssl-essentials-working-with-ssl-certificates-private-keys-and-csrs
作者:Mitchell Annikas 主题:wxy 译者:wxy 校对者:wxy
本文由LCTT 原创编辑,Linux China 自豪发布。
点击“了解更多”可访问文内链接
版权声明:本文转载于今日头条,版权归作者所有。如有侵权,请联系本站编辑删除。