HTTPS相关概念
CA根证书
根证书是CA认证中心给自己颁发的证书,是信任链的起始点。安装根证书意味着对这个CA认证中心的信任。
CA证书有两个作用:
- 签发数字证书(用户找CA签发)
- 校验数字证书(客户找CA校验收到的证书是否合法有效)
在SSL通信握手过程中,需要将公钥数字证书交给对方,对方如何对数字证书进行校验?就是要在找到签发此证书的CA证书及证书链,一直找到CA根证书。
server-key.pem
-
服务端生成的私钥文件
-
可以解密客户端发送加密数据(https握手过程交换秘钥)
server.csr
-
csr文件为证书请求文件
-
包含企业等信息,非对称加密等选项
server.pem
-
证书文件
-
使用server.csr通过CA证书签名(sha256,md5)过的证书文件
开始
1. github下载cfssl
这里需要2个bin文件
分别下载相应的版本
cfssl
cfssljson
2. 生成配置文件
生成根证书配置
cfssl print-defaults csr > json/ca-csr.json
内容如下
{
"CN": "example.net",
"hosts": [
"example.net",
"www.example.net"
],
"key": {
"algo": "ecdsa",
"size": 256
},
"names": [
{
"C": "US",
"ST": "CA",
"L": "San Francisco"
}
]
}
一般的数字证书产品的主题通常含有如下字段:
CN
CN: 公用名称 (Common Name) 简称,
- 对于 SSL 证书,一般为网站域名或IP地址;
- 而对于代码签名证书则为申请单位名称;
- 而对于客户端证书则为证书申请者的姓名;
hosts
hosts可以指定多个(泛)域名以及多个IP地址
key
指定了加密算法,一般使用rsa(size:2048)
names 字段
单位名称 (Organization Name) :简称:O 字段
- 对于 SSL 证书,一般为网站域名;
- 而对于代码签名证书则为申请单位名称;
- 而对于客户端单位证书则为证书申请者所在单位名称;
证书申请单位所在地:
-
所在城市 (Locality) 简称:L 字段
-
所在省份 (State/Provice) 简称:S 字段
-
所在国家 (Country) 简称:C 字段,只能是国家字母缩写,如中国:CN
其他一些字段:
-
电子邮件 (Email) 简称:E 字段
-
多个姓名字段 简称:G 字段
-
介绍:Description 字段
-
电话号码:Phone 字段,格式要求 + 国家区号 城市区号 电话号码,如: +86 732 88888888
-
地址:STREET 字段
-
邮政编码:PostalCode 字段
-
显示其他内容 简称:OU 字段
生成证书文件
cfssl gencert -initca json/ca-csr.json | cfssljson -bare ca
执行后生成几个文件
生成的文件中有下面三个后面会用到:
- ca-key.pem: CA 证书密钥
- ca.pem: CA 证书
- ca.csr
生成签发配置文件(用 CA 证书来签发其它证书时需要用)
cfssl print-defaults config > json/ca-config.json
内容如下
{
"signing": {
"default": {
"expiry": "168h"
},
"profiles": {
"www": {
"expiry": "8760h",
"usages": [
"signing",
"key encipherment",
"server auth"
]
}
}
}
}
- signing:签署配置
- default:默认的配置
- expiry 过期时间
- default.expiry:默认签署其他证书过期时间
- profiles:配置文件,可以配置多个不同的证书配置
- www:定义的一个profile,可以使用命令生成这个的证书
- usages 用途
准备数据
复制 json/ca-csr.json 到json/www-csr.json,修改内容
{
"CN": "test.xxx.com",
"hosts": [
"*.test.xxx.com",
"test.xxx.com"
],
"key": {
"algo": "ecdsa",
"size": 256
},
"names": [
{
"C": "CN",
"ST": "BJ",
"L": "BJ xxx"
}
]
}
为网站签发证书
cfssl gencert \
-ca=ca.pem \
-ca-key=ca-key.pem \
-config=json/ca-config.json \
-profile=www \
json/www-csr.json | cfssljson -bare www
会生成下面两个重要的文件:
- www-key.pem: www 密钥。
- www.pem: www 证书。
配置nginx
ssl_certificate /xxx/keys/www.pem;
ssl_certificate_key /xxx/keys/www-key.pem;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;