OpenSSL 生成自签名证书

OpenSSL 生成自签名证书

1.安装OpenSSL

2.新建openssl.cnf文件

[ req ]
default_bits = 2048
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no

[ req_distinguished_name ]
C = CN
CN = localhost

[ v3_req ]
keyUsage = nonRepudiation, digitalSignature, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[ alt_names ]
DNS.1 = localhost
DNS.2 = 127.0.0.1

3.新建文件cert放证书,在此目录下生成密钥,生成自签名证书

openssl req -new -x509 -nodes -days 3650 -keyout localhost.pem -out localhost.crt -config openssl.cnf
  • 输出的密钥:localhost.pem
  • 输出的证书:localhost.crt
  • 证明的信息:/C=CN/CN=localhost

最简单的证明信息要有

  • C=CN,表示中国
  • CN=ioufev.com,证书绑定域名:localhost

4.将密钥和证书合并成一个 pfx 文件,并输入文件保护密码:12345678

openssl pkcs12 -export -in localhost.crt -inkey localhost.pem -out localhost.pfx -name localhost
  • 输入的密钥:localhost.pem
  • 输入的证书:localhost.crt
  • 输出的 pfx 证书:localhost.pfx
  • 输出证书的名字:localhost,不加 `-name localhost 的话,默认名字是 1

5. .pfx 证书和 .cer 证书

通常情况下,作为文件形式存在的证书一般有三种格式:

  • 第一种:带有私钥的证书,由Public Key Cryptography Standards #12,PKCS#12标准定义,包含了公钥和私钥的二进制格式的证书形式,以.pfx作为证书文件后缀名.
  • 第二种:DER Encoded Binary (.cer) 二进制编码的证书,证书中没有私钥,DER 编码二进制格式的证书文件,以.cer作为证书文件后缀名.
  • 第三种:Base64 Encoded(.cer),Base64编码的证书,证书中没有私钥,BASE64 编码格式的证书文件,也是以.cer作为证书文件后缀名.

由定义可以看出,只有pfx格式的数字证书是包含有私钥的,cer格式的数字证书里面只有公钥没有私钥.

Cer证书只包含公钥信息,如果客户端与网站通信时需要用到私钥(基本所有需要数字证书的网站都会用到私钥),则cer证书是无法正常访问网站的,网站会提示“该页要求客户证书”.由于cer证书只包含公钥信息,一般只能用于解密使用(解密该公钥对应的私钥加密的数据).在申请证书的机器上存储了私钥信息,因此,可以把CER证书导入为PFX证书,并可以把PFX证书导出,这样其他机器就可以安装PFX证书了.

Pfx证书既可以导出为pfx证书,也可以导出为cer证书.Pfx证书导出时,会提示是否导出私钥,导出私钥即pfx证书,不导出私钥就是cer证书.如果选择导出私钥,出于安全性考虑,需要指定一个密码来保护该私钥,后续再次导入该pfx证书时,需要提供保护该私钥密码,才能在机器上安装证书.