使用OpenSSL生成自签名证书


在部署HTTPS站点的时候,一个必不可少的步骤是申请证书。对于内网程序来说,申请证书有的时候并不方便,此时也可以通过自签名的方式自己签发证书。虽然这种证书浏览器认为不方便,但还是能享受到加密防护和http2带来的好处的。本文这里主要介绍下如何使用OpenSSL自签名证书。

下载OpenSSL

对于Windows来说,网上有已经打包了的二进制文件下载,只是自签名证书话,下载这个只有几兆的安装包即可。

另外,大部分Windows开发人员都是安装了Git For Windows的,此时在C:\Program Files\Git\mingw64\bin目录下也是有一个已经编译了的OpenSSL的,直接用这个更加方便。

生成证书

如下是一个生成证书的简单示例

  openssl req -newkey rsa:2048 -nodes -keyout d:\key.pem -x509 -days 365 -out d:\certificate.pem

它主要包括了证书的输出位置和有效时间, 执行命令后,并不会立即生成证书,而是会在交互模式下继续提示输入一些信息,主要是证书的一些基本信息,如下所示:

Generating a RSA private key
................+++++
................+++++
writing new private key to 'd:\key.pem'
-----
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]:

信息输入完后就会生成证书文件,证书文件都是文本文件,可以通过记事本查看。其中key.pem是私钥,需要保护好,而certificate.pem则是证书相关的一些信息,可以通过openssl命令查看

  openssl x509 -noout -text -in certificate.pem

 

转换为pfx格式

在.net core程序部署的时候,往往采用的是pfx格式的证书,pfx文件将证书和私钥打包在一起,并通过一个密钥来保护私钥,这样可以比较方便的保护私钥,也简化了部署。

我们也可以通过open ssl命令将刚才生成的证书转换为pfx格式,转换过程中会提示输入密码。

  openssl pkcs12 -export -out d:\ca.pfx -inkey d:\key.pem -in d:\certificate.pem

我们从第三发签发机构签发的证书也可以用这种方式转换为pfx格式。

相关