使用cfssl为程序添加https证书
使用cfssl为程序添加https证书
- 下载安装
- 使用cfssl
- 使用cfssl实现创建证书浏览器认证
cfssl是一款比较好用的PKI/TLS工具,可以方便的生成https证书
下载与安装
cfssl 官方地址 https://github.com/cloudflare/cfssl
下载地址
https://github.com/cloudflare/cfssl/releases/tag/v1.6.3
证书的创建相关操作只需要下载使用
- cfssljson_1.6.3_linux_amd64
- cfssl_1.6.3_linux_amd64
已上传到百度云(/常用软件/https/cfssl)
下载完成后,重命名为cfssl 并修改其权限后即可使用
实例1 自定义CA签发DV证书
相关配置文件在 /config/demo1 下
实例1:创建一个自定义的CA机构根证书,使用这个根证书实现对其他证书的颁发,让浏览器能够信息此证书
例如
自定义的CA机构名称为LYJCA , 要签发一个网址为 api.liuyijiang.com DV证书
step1 创建自定义的CA根证书
CA根证书就是一个自签名证书 可以使用 ./cfssl gencert -initca xx.json 命令创建 在此之前先创建一个证书签名请求文件csr配置json
可以使用 ./cfssl print-defaults csr > ca-csr.json先创建一个证书签名请求文件内容模板
ca-csr.json最终内容如下 (见/config/demo1/ca-csr.json)注意使用的时候不能有注释
{
"CN": "LYJCA", //CN:Common Name
"key": {
"algo": "rsa", //指定加密算法
"size": 2048 //指定加密算法位数
},
"names": [
{
"C": "CN", //C: Country,配置国家信息 例如 US美国 CN中国
"L": "Chengdu", //L: Locality,地区,城市 例如 BeiJing Chengdu
"ST": "Sichuan", //ST: State,州,省 例如 SICHUAN Sichuan Guangzhou
"O": "liuyjCA", //O: Organization Name,组织名称,公司名称 例如公司名称为
"OU": "System" //OU: Organization Unit Name,组织单位名称,公司部门名字任意 System
}
]
}
使用 ./cfssl gencert -initca ca-csr.json | ./cfssljson -bare ca 创建证书,私钥,csr
使用cfssl 命令读取ca-csr.json配置中的内容生成的内容用管道发送给cfssljson命令 -bare ca(ca这个名称可以自定义 就是生成文件的名称)
生成内容如下
- ca-key.pem ca证书私钥
- ca.csr ca证书签名请求文件
- ca.pem ca证书
主要将使用ca-key.pem 与 ca.pem
可以使用 ./cfssl certinfo -cert=./ca.pem 查看证书信息
注意:可以使用cat ca.pem > ca.crt 各式转换
step2 使用CA根证书签发api.liuyijiang.comDV证书
先使用 ./cfssl print-defaults config > ca-config.json先创建一个证书签发配置文件
这个配置文件主要用于CA根证书颁发其他证书时的一些配置
ca-config.json最终内容如下 (见/config/demo1/ca-config.json)注意使用的时候不能有注释
{
"signing":{
"default":{
"expiry":"8760h" //指定了证书的有效期
},
"profiles":{//配置策略
"mytest":{ //配置一个名称为mytest的策略
"expiry":"8760h", //指定了证书的有效期
"usages":[
"signing", //表示该证书可用于签名其它证书
"key encipherment",
"server auth", // client端(客户端) 可以用该 CA 对 server 提供的证书进行验证
"client auth" // server端(服务端) 可以用该 CA 对 client 提供的证书进行验证
]
}
}
}
}
在创建一个api.liuyijiang.com-csr.json,即api.liuyijiang.com这个域名的证书申请配置文件
api.liuyijiang.com-csr.json内容如下 (见/config/demo1/api.liuyijiang.com-csr.json)
{
"CN":"liuyijiang.com",
"hosts":[
"api.liuyijiang.com" //配置域名 这个证书作用于api.liuyijiang.com这个域名
],
"key":{
"algo":"rsa",
"size":2048
},
"names":[
{
"C": "CN", //C: Country,配置国家信息 例如 US美国 CN中国
"L": "Chengdu", //L: Locality,地区,城市 例如 BeiJing Chengdu
"ST": "Sichuan", //ST: State,州,省 例如 SICHUAN Sichuan Guangzhou
"O": "liuyijiang.com", //O: Organization Name,组织名称,公司名称 例如公司名称为
"OU": "System" //OU: Organization Unit Name,组织单位名称,公司部门名字任意 System
}
]
}
最后使用cfssl gencert命令生成 api.liuyijiang.com域名的证书
命令如下:
./cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=mytest api.liuyijiang.com-csr.json | ./cfssljson -bare api.liuyijiang.com
参数说明
-ca=ca.pem 指定CA证书 (这里就是step1中创建的CA证书)
-ca-key=ca-key.pem 指定CA的私钥 (这里就是step1中创建的CA私钥)
-config=ca-config.json 指定配置文件
-profile=mytest 指定使用配置文件中的哪个配置 这里对应ca-config.json中的mytest配置
这样api.liuyijiang.com.pem这个证书就可以使用ca.pem这个根证书来验证合法性了
step3 测试api.liuyijiang.com.pem证书
第一步 nginx配置
nginx中添加 https 配置
server {
listen 443 ssl;
server_name api.liuyijiang.com;
ssl_certificate /ops/cfssl/api.liuyijiang.com.pem;
ssl_certificate_key /ops/cfssl/api.liuyijiang.com-key.pem;
location / {
root html;
index index.html index.htm;
}
}
./nginx -s reload 重启nginx
第二步 添加域名映射
这里使用switchhosts来配置域名映射,也可以直接修改 C:\Windows\System32\drivers\etc\hosts文件 效果是一样的
此时浏览器(Chrome)访问 https://api.liuyijiang.com/ 此域名还没有被浏览器信任
第三步 将自定义的CA根证书安装到浏览器
我们在网上申请的证书,那些签发机构的CA证书其中早就内置到浏览器中了,所有我们的证书才能受信。
此步只需要把我们自己的CA证书导入到浏览器即可
将Step1中得到的ca.pem 重命名为 cat.crt 并保存在电脑上
这里使用Chrome浏览器作为测试
选择隐私设置和安全性
选择管理证书
选择“受信任的根证书颁发机构”
导入自定义的CA证书
可以看到自定义的CA证书已经导入成功
重启浏览器后生效
再次访问 https://api.liuyijiang.com/ 成功受信,出现小锁
可以看到证书的信息