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


该命令基于现有的证书(domain.crt)和私钥(domain.key)创建一个新的 CSR(domain.csr):
openssl x509        -in domain.crt        -signkey domain.key        -x509toreq -out domain.csr选项 -x509toreq 指定你使用一个 X509 证书来制作 CSR 。
生成 SSL 证书如果你想使用 SSL 证书来确保服务的安全,但你不需要 CA 签名的证书,一个有效的(和免费的)解决方案是签署你自己的证书 。
你可以自己签发的一种常见证书是 自签证书(self-signed certificate) 。自签证书是用自己的私钥签署的证书 。自签证书和 CA 签名证书一样可以用来加密数据,但是你的用户会显示一个警告,说这个证书不被他们的计算机或浏览器信任 。因此,只有当你不需要向用户证明你的服务身份时,才可以使用自签名证书(例如非生产或非公开服务器) 。
本节介绍与生成自签名证书相关的 OpenSSL 命令 。
生成自签证书
【OpenSSL 精粹:SSL 证书、私钥和 CSR】如果你想使用 HTTPS(HTTP over TLS)来保护你的 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 条目
该命令允许你查看和验证纯文本的 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 -in 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 | openssl md5


推荐阅读