跳至主要內容

常见证书说明

bincooo大约 3 分钟

X.509证书标准定义

PEM、DER

--- 文件拓展名: --- CRT和CER是一种东西,只是后缀名不一样:也同样有两种格式: Base64和字节码 PEM: 纯文本文件, 以-----BEGIN 某某某-----开头, 以-----END 某某某-----结尾, 内容是 base64 编码 DER: 二进制文件格式, 一般应使用 Windows/Java 开发工具打开, 也可以使用openssl命令行工具提取其中信息或进行编码转换 CRT: 常见于*NIX系统,有可能是PEM编码,也有可能是DER编码,大多数应该是PEM编码 CER: 常见于Windows系统,同样的,可能是PEM编码,也可能是DER编码,大多数应该是DER编码 KEY: 通常用来存放一个公钥或者私钥,并非X.509证书,编码同样的,可能是PEM,也可能是DER 查看KEY的办法:

openssl rsa -in mykey.key -text -noout

如果是DER格式的话,同理应该这样了:

openssl rsa -in mykey.key -text -noout -inform der

CSR: 这个并不是证书,而是向权威证书颁发机构获得签名证书的申请,其核心内容是一个公钥,在生成这个申请的时候,同时也会生成一个私钥,私钥要自己保管好 PFX/P12: ngnix服务器来说,一般CRT和KEY是分开存放在不同文件中的,但Windows的IIS则将它们存在一个PFX文件中 PFX转换为PEM编码:

openssl pkcs12 -in for-iis.pfx -out for-iis.pem -nodes

生成pfx的命令:

openssl pkcs12 -export -in certificate.crt -inkey privateKey.key -out certificate.pfx -certfile CACert.crt

JKS: 即Java Key Storage,这是Java的专利,跟OpenSSL关系不大,利用Java的一个叫"keytool"的工具,可以将PFX转为JKS.

注: keytool也能直接生成JKS.

证书编码的转换

PEM转为DER:

openssl x509 -in cert.crt -outform der -out cert.der

DER转为PEM:

openssl x509 -in cert.crt -inform der -outform pem -out cert.pem

生成CSR时翻译说明

Country Name (2 letter code) [AU]:CN 															国家名称(2 个字母代码)[AU]:CN
State or Province Name (full name) [Some-State]:GuangDong					州或省名称(全名)[Some-State]:广东
Locality Name (eg, city) []:ZhongShan															地名(如城市)[]:ZhongShan
Organization Name (eg, company) [Internet Widgits Pty Ltd]:xxx		组织名称(例如,公司)[Internet Widgits Pty Ltd]:xxx
Organizational Unit Name (eg, section) []:xxx											组织单位名称(例如,部分)[]:xxx
Common Name (e.g. server FQDN or YOUR name) []:*.xxx.com 					通用名称(例如服务器 FQDN 或您的姓名)[]:*.xxx.com
Email Address []:bingco.zn@gmail.com 															邮箱地址 []:bingco.zn@gmail.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:xxx.com 																	证书库密码: xxx.com 
An optional company name []:																			可选的公司名称 []:

自颁发证书指令

  1. 生成KEY 算法是des3
openssl genrsa -des3 -out server.key 2048
  1. 生成证书签名工具CSR
openssl req -new -key server.key -out server.csr
  1. 生成CA证书

    openssl x509 \
    -req \
    -days 365 \
    -in server.csr \
    -signkey \
    -server.key \
    -out server.crt
    

    如果需要做双向认证,可重复以上步骤生成客户端证书

证书转换

格式转换: PEM转DER

// 这里转换参可以为der或pem
openssl x509 -in server.crt -out server-bin.crt -outform der

测试可用自签名步骤

创建 ca.cnf 文件

写入如下配置信息

distinguished_name = req_distinguished_name #特征名称信息
prompt = no #关闭指令输入特征名称信息
[req_distinguished_name]
C = CN
ST = GuangDong
L = ZhongShan
O = xxx
OU = xxx
CN = 192.168.0.168

[v3_req] # v3配置
keyUsage = critical, digitalSignature, keyAgreement
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names] #域名与IP配置
DNS.1 = xxx.com
DNS.2 = *.xxx.com
DNS.3 = www.xxx.com
IP.1 = 127.0.0.1
IP.2 = 192.168.0.168

生成指令

openssl \
req -x509 \
-nodes \
-days 365 \
-newkey rsa:2048 \
-keyout priviate.key \
-out nginx.crt \
-config req.cnf \
-sha256 \
-extensions v3_req