基本概念:

X509 证书标准,定义证书内容

openssl:一套开源软件,SSL密码库工具,提供了一个通用、健壮、功能完备的工具套件,用以支持SSL/TLS 协议的实现。

CFSSL: CFSSL是CloudFlare的PKI / TLS瑞士×××。它既是命令行工具,也是用于签名,验证和捆绑TLS证书的HTTP API服务器.

编码格式:PEM DER

PEM - Privacy Enhanced Mail,打开看文本格式,以"-----BEGIN..."开头, "-----END..."结尾,内容是BASE64编码.

查看PEM格式证书的信息:openssl x509 -in certificate.pem -text -noout

Apache和*NIX服务器偏向于使用这种编码格式.


DER - Distinguished Encoding Rules,打开看是二进制格式,不可读.

查看DER格式证书的信息:openssl x509 -in certificate.der -inform der -text -noout

Java和Windows服务器偏向于使用这种编码格式.

扩展名:

CRT应该是certificate的三个字母,其实还是证书的意思,常见于*NIX系统,有可能是PEM编码,也有可能是DER编码,大多数应该是PEM编码。

CER 还是certificate,还是证书,常见于Windows系统,同样的,可能是PEM编码,也可能是DER编码,大多数应该是DER编码.

KEY 通常用来存放一个公钥或者私钥,并非X.509证书,编码同样的,可能是PEM,也可能是DER.

  查看KEY的办法:openssl rsa -in mykey.key -text -noout

CSR - Certificate Signing Request,即证书签名请求,这个并不是证书,而是向权威证书颁发机构获得签名证书的申请,其核心内容是一个公钥(当然还附带了一些别的信息),在生成这个申请的时候,同时也会生成一个私钥,私钥要自己保管好。

PFX/P12:predecessor of PKCS#12,常用语windows IIS。

JKS - 即Java Key Storage,这是Java的专利

证书转换:

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

1.openssl创建私钥,公钥,证书,签名请求,认证。

    1.1创建私钥:

openssl genrsa -out rsa_private.key 2048  #创建2048位私钥

1.2生成公钥:

openssl rsa -in  rsa_private.key -pubout -out rsa_public.key 

1.3生成自签证书(#创建私钥的同时创建自签证书,两者合二为一)

openssl req -newkey rsa:2048 -nodes -keyout rsa_private.key -x509 -days 365 -out cert.crt

# -newkey 生成私钥 rsa:2048 生成2048位秘钥 -node  不加密证书 -x509生成证书 -days 生效时间 -out产生证书

"/C=CN

/ST=GD

/L=SZ

/O=example

/OU=dev

/CN=example.com #本机名称

/emailAddress=example.com"

或者自动输入信息

openssl req -newkey rsa:2048 -nodes -keyout rsa_private.key -x509 -days 365 -out cert.crt -subj "/C=CN/ST=GD/L=SZ/O=example/OU=dev/CN=example.com"

1.4客户端生成签名请求

openssl genrsa -aes256  -out server.key 2048 #生成私钥

openssl req -new -key server.key -passin pass:111111 -out server.csr -subj "/C=CN/ST=GD/L=SZ/O=example/OU=dev/CN=主机名至关重要"

1.5证书签发:

openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey ca.key  -CAcreateserial -out server.crt

1.6自建证书信任问题

On Ubuntu:

cp yourdomain.com.crt /usr/local/share/ca-certificates/yourdomain.com.crt

update-ca-certificates

On Red Hat (CentOS etc):

cp yourdomain.com.crt /etc/pki/ca-trust/source/anchors/yourdomain.com.crt

update-ca-trust

2.CSFFL创建证书

1. 下载安装cfssl,cfssl-certinfo,cfssljson

wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64

wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64

wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64

mv  cfssl-certinfo_linux-amd64 /usr/local/bin/cfssl-certinfo

mv  cfssl_linux-amd64 /usr/local/bin/cfssl

mv  https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 /usr/local/bin/cfssljson

chmod +x  /usr/local/bin/cfssl /usr/local/bin/cfssl-certinfo /usr/local/bin/cfssljson

2 cfssl 工具解释

   sign             签发证书

   bundle           创建包含客户端证书的证书包

   genkey           生成私钥和证书请求

   gencert          生成私钥和证书

   serve            启动证书服务器

   version          打印版本

   selfsign         生成自签证书

   print-defaults   列出默认命令

3.生成CA证书和私钥

vim ca-csj.json

{

"CN": "example.com",    #浏览器验证该字段是否合法,一般写域名,非常重要.

"names": [

{

"C":  "US",

"L":  "San Francisco",

"O":  "Internet Widgets, Inc.",

"OU": "WWW",

"ST": "California"

}

]

}

4.生成自签证书CA证书和CA私钥和CSR(证书签名请求)

cfssl gencert -initca ca-csr.json | cfssljson -bare ca  ## 初始化ca

生成 ca.csr,ca-key.pem,ca.pem

5.生成证书签名请求和私钥

客户端私钥json文件格式如下:

{

“ hosts ”:[   #相当于上次所说的扩展认证,即一个证书的网站可以是*.youku.com也是可以是*.google.com

“ example.com ”,

“ www.example.com ”

]

“ key ”:{

“ algo ”: “ rsa ”,

“ size ”: 2048

},

“名字”:[

{

“ C ”:   “ US ”,

“ L ”:   “ San Francisco ”,

“ O ”:   “ Internet Widgets,Inc。”,

“ OU ”: “ WWW ”,

“ ST ”: “ California ”

}

]

}

cfssl genkey csr.json

6.生成本地颁发的证书和私钥

cfssl gencert -ca cert -ca-key key [-hostname=comma,separated,hostnames] csr.json #[hostname 理解同上]

最后全文仅供参考,后续有误的地方,我会更正。


文档参考:

http://blog.sina.com.cn/s/blog_3d5517850102w2rs.html

https://blog.csdn.net/gengxiaoming7/article/details/78505107

https://github.com/cloudflare/cfssl

https://blog.51cto.com/liuzhengwei521/2120535