openssl ssl证书相关命令

今天再给几个域名证书续期时,遇到了一些问题,其中一些和openssl命令相关,对于我们建站的人来说,这些命令可能经常会用到,这里做个记录以备查阅。

因为涉及到openssl,所以在使用openssl之前需要在使用的系统上安装有openssl,大多数Linux及macOS默认都安装了,Windows系统默认不自带,建议使用openssl或者WSL子系统。

不管是收费还是免费,DV还是EV,如果我们是手动申请SSL证书,都需要有个CSR(Certificate Signing Request,凭证签发请求文件)文件。

常见的SSL证书分为RSA和ECC两类,下面分别是利用openssl生成RSA和ECC的CSR文件命令。

openssl生成ECC CSR文件

ECC的CSR文件需要两个步骤,下面两行命令即可解决:

openssl ecparam -out nodeedge-ecc.key -name prime256v1 -genkey
openssl req -new -key nodeedge-ecc.key -out nodeedge-ecc.csr

openssl生成RSA CSR文件

对比ECC证书,RSA的CSR文件生成比较简单,一行命令就可以:

openssl req -out nodeedge-rsa.csr -new -newkey rsa:2048 -nodes -keyout nodeedge-rsa.key

完成之后当前目录下面应该会有一个csr及key文件,csr文件用来提交到证书申请机构,key需要重点保存,两个文件名可以自定义,但是建议以csr和key结尾。

CSR文件内容生成

执行过程中可能需要输入一些内容,如果不知道怎么输入也没关系,只需要重点关注下面那个Common Name就行,如果想要申请单域名证书或者多域名证书比如nodeedge.com或者www.nodeedge.com ,只需要输入对应的域名就可以,如果是要申请泛域名证书或者叫做野卡(wildcard)比如nodeedge.com域名下的所有域名,则输入*.nodeedge.com就可以,比如下面就是申请nodeedge的泛域名证书。

root@NodeEdge:~# openssl req -new -key nodeedge-ecc.key -out nodeedge-ecc.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Beijing
Locality Name (eg, city) []:Beijing
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Node Ltd.
Organizational Unit Name (eg, section) []:IT
Common Name (e.g. server FQDN or YOUR name) []:*.nodeedge.com
Email Address []:mail@nodeedge.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

单域名、多域名及泛域名证书区别就在上面Common Name

openssl命令行查看SSL证书信息

SSL证书申请下来之后,部署到Web Server之后可以在浏览器里面看到证书的详细信息应该很多人知道,但是如果有的时候只是想查看一下证书的信息,就没必要找个Web Server部署再看,直接在命令行就能查看SSL的信息。

假设申请下来的SSL证书名称为nodeedge-ecc.crt,查看SSL所有信息如下:

openssl x509 -noout -text -in nodeedge-ecc.crt

申请ECC还是RSA证书

这两种证书我都使用过至少一年的时间,ECC和RSA的详细对比还是建议看相关的技术文档,我仅说说实际的使用体验:

  • 据说ECC比RSA证书速度更快,但是这一两年来说,并没有感觉到快在哪里
  • ECC在一些低版本系统或者浏览器平台上不支持,如果只是单ECC证书,可能会导致某些平台无法访问网站
  • 某些服务不支持ECC证书,比如说腾讯云CDN,添加ECC证书会提示证书与私钥不对应或者证书与所选域名不匹配,请检查您上传的证书是否正确(22709),虽然官方文档的cipher支持ECC系列,但是无法添加,如下图所示

tencent-cloud-cdn-ssl-error

解决办法是使用RSA或者部署双证书,Nginx在1.11.0开始支持RSA及ECC双证书支持,这样可以提高访问速度,也能兼顾老平台。

留下评论

电子邮件地址不会被公开。 必填项已用*标注