OpenSSL 精粹:SSL 证书、私钥和 CSR


OpenSSL 精粹:SSL 证书、私钥和 CSR

文章插图
 
这本小抄风格的指南提供了 OpenSSL 命令的快速参考,这些命令在常见的日常场景中非常有用 。
  • 来源:https://linux.cn/article-12293-1.html
  • 作者:Mitchell Anicas
  • 译者:Xingyu.Wang
介绍OpenSSL 是一个多功能的命令行工具,可以用于与 公钥基础设施(Public Key Infrastructure)(PKI)和 HTTPS(HTTP over TLS)相关的大量任务 。这本小抄风格的指南提供了 OpenSSL 命令的快速参考,这些命令在常见的日常场景中非常有用 。这包括生成私钥、 证书签署请求(certificate signing request)(CSR)和证书格式转换的 OpenSSL 示例,但它并没有涵盖 OpenSSL 的所有用途 。
如何使用本指南
  • 如果你不熟悉证书签署请求(CSR),请阅读第一部分 。
  • 除了第一部分,本指南采用了简单的小抄格式:自带了命令行代码片段 。
  • 跳到与你准备完成的任务相关的任何部分 。
  • 大多数命令都是单行的,为了清晰起见,已经扩展到多行(使用符号) 。
关于证书签署请求(CSR)如果你想从 证书颁发机构(certificate authority)(CA)那里获得 SSL 证书,你必须生成一个 证书签署请求(certificate signing request)(CSR) 。一个 CSR 主要是由一个密钥对的公钥和一些附加信息组成 。当证书被签署时,这两部分都会被插入到证书中 。
每当你生成一个 CSR 时,你会被提示提供有关证书的信息 。这些信息被称为 区分名称(Distinguised Name)(DN) 。DN 中的一个重要字段是 通用名称(Common Name)(CN),它应该是你打算使用证书的主机的 完全合格域名(Fully Qualified Domain Name)(FQDN) 。当创建 CSR 时,也可以通过命令行或文件传递信息来跳过交互式提示 。
DN 中的其他项目提供了有关你的业务或组织的附加信息 。如果你是从证书机构购买 SSL 证书,通常要求这些附加字段(如“ 组织(Organization)”)准确地反映你的组织的详细信息 。
下面是一个 CSR 信息提示的例子:
---Country Name (2 letter code) [AU]:USState or Province Name (full name) [Some-State]:New YorkLocality Name (eg, city) []:BrooklynOrganization Name (eg, company) [Internet Widgits Pty Ltd]:Example Brooklyn CompanyOrganizational Unit Name (eg, section) []:Technology DivisionCommon Name (e.g. server FQDN or YOUR name) []:examplebrooklyn.comEmail Address []:如果你想非交互式地回答 CSR 信息提示,你可以通过在任何请求 CSR 信息的 OpenSSL 命令中添加 -subj 选项来实现 。这里是该选项的一个例子,使用上面代码块中显示的相同信息:
-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(HTTP over TLS)来保护你的 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 指定密钥应该是 2048 位,使用 RSA 算法生成 。选项 -nodes 指定私钥没有用密码加密 。这里没有包含 -new 选项,而是隐含在其中,表示正在生成一个 CSR 。
从现有的私钥中生成一个 CSR
如果你已经有了私钥,并想用它向 CA 申请证书,请使用这个方法 。
该命令基于现有的私钥(domain.key)创建一个新的 CSR(domain.csr):
openssl req        -key domain.key        -new -out domain.csr回答 CSR 信息提问,完成该过程 。
选项 -key 指定一个现有的私钥(domain.key),它将被用来生成一个新的 CSR 。选项 -new 表示正在生成一个 CSR 。
从现有的证书和私钥生成 CSR
如果你想更新现有的证书,但由于某些原因,你或你的 CA 没有原始的 CSR,请使用这个方法 。基本上可以省去重新输入 CSR 信息的麻烦,因为它是从现有证书中提取信息的 。


推荐阅读