Https信任证书申请与非信任证书生成方式,适用于TLS双向安全校验
来源:互联网 发布:linux重置路由命令 编辑:程序博客网 时间:2024/05/21 17:05
1. 前言
根据Apple声明2017年元旦会禁用与停止在IOS平台使用HTTP协议与后端进行接口交互;促使后端的接口统一需要更换为HTTPS的协议,而且将来会是一大趋势,目前很多国内外大型网站也都陆续更换了HTTPS协议进行交互;所以本人正好利用这个机会进行学习并对工作当中所学到的内容进行整理,以便帮助后面的同学更方便进行学习与了解;如果有什么写的不准确的地方请给我留言,我会尽快进行修正,谢谢!
2. 说明
这里主要针对证书生成进行阐述,不会具体讲解SSL/TLS的基础理论;想要了解具体概念可以参考SSL/TLS图解;证书的生成方式取决于每个人具体的需求而不同;安全校验分为两种,单向与双向;分为受信任与非受信任(即浏览器显示的红色叉叉);
1. 单向只需要服务器证书即可,客户端不需要额外提供任何证书即可访问;而双向不仅服务端需要证书而客户端也需要提供证书才可进行访问;
2. 所谓的受信任就是需要找国际CA根信任机构或子机构签名过的,而非受信任就是自己充当CA机构角色给自己签名。
3. 注意
双向受信任证书生成的做法我这边暂时没弄,所以具体可以参考双向非受信任证书生成举一反三试一试;我想原理应该大致相同。
4. 样例环境
操作系统CentOs 7,网页服务器采用nginx/1.10.2。
5. 单向受信任证书生成
我这里找这家信任机构letsencrypt申请的证书,具体使用了一款工具certbot自动生成证书直接拿来使用,如果想手动的话直接打开这个机构网站走注册与申请流程即可。
5.1 注意
- 必须要使用一个域名来进行生成证书;
- 在生成证书过程中,信任机构会通过域名(http://ssl.nakedhub.cn/.well-known/acme-challenge/tJjLPXG_s_oCcsJDv2fScMZDGmHfWbbdt9vfaQusOtE
)访问目录校验相关文件信息; - 这个工具理论上只需要安装在某台专用主机上就可以了,以后方便证书统一管理;生成证书时需要访问的域名目录地址可以使用反向代理映射即可。
5.2 开始生成
具体安装方式与界面操作我就不贴出来了,直接参考certbot文档即可;打开图形界面后选择第一项输入域名信息;然后再下一步选择一个能被信任机构访问到的目录位置(这里参考注意点2与3)就可以了。
certbot certonly
5.3 Nginx核心配置
listen 443;server_name ssl.nakedhub.cn;ssl on;ssl_certificate /etc/letsencrypt/live/ssl.nakedhub.cn/cert.pem;ssl_certificate_key /etc/letsencrypt/live/ssl.nakedhub.cn/privkey.pem;
6. 单向非受信任证书生成
主要采用openssl命令行进行操作生成证书。
6.1 生成CA证书
openssl genrsa -aes256 -out ca-key.pem 4096openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
6.2 生成服务器证书
openssl genrsa -out server-key.pem 4096openssl req -subj "/CN=ssl.nakedhub.cn" -sha256 -new -key server-key.pem -out server.csropenssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem
6.3 Nginx核心配置
listen 443;server_name ssl.nakedhub.cn;ssl on;ssl_certificate /home/certs/server-cert.pem;ssl_certificate_key /home/certs/server-key.pem;
6.4 测试并查看结果
直接通过浏览器打开或curl看到结果,curl要加非受信任(–insecure)的选项,否则不会成功。
curl https://ssl.nakedhub.cn --insecure
7. 双向非受信任证书生成
双向方式生成CA证书与服务器证书和单向的相同,唯一不同的需要再生成客户端所需要的证书,只要通过同一个CA签名后就可以了。
7.1 生成客户端证书
openssl genrsa -out client-key.pem 4096openssl req -subj "/CN=client" -sha256 -new -key client-key.pem -out client.csropenssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out client-cert.pem
7.2 Nginx核心配置
listen 443;server_name ssl.nakedhub.cn;ssl on;ssl_certificate /home/certs/server-cert.pem;ssl_certificate_key /home/certs/server-key.pem;ssl_client_certificate /home/certs/ca.pem; #CA证书ssl_verify_client on; #需要客户端提供证书校验
7.3 利用CURL测试查看结果
证书位置最好使用绝对路径,相对路径也必须用(./)才能正确找到证书。
curl https://ssl.nakedhub.cn --cacert /home/certs/ca.pem --cert /home/certs/client-cert.pem --key /home/certs/client-key.pem
7.4 生成浏览器或JAVA可识别的证书
主要把已有的客户端证书转成PKCS12格式文件并输入此文件的密码锁即可,至于生成之后如何在浏览器导入并使用可以搜索一下Chrome/IE如何导入数字证书即可测试。
openssl pkcs12 -export -clcerts -in /home/certs/client-cert.pem -inkey /home/certs/client-key.pem -out ./client.p12
8. 参考资料
https://blog.imdst.com/nginx-ssl-shuang-xiang-ren-zheng-key-sheng-cheng-he-pei-zhi/
https://docs.docker.com/engine/security/https/
http://ustory.lofter.com/post/33be15_cddd2df
- Https信任证书申请与非信任证书生成方式,适用于TLS双向安全校验
- 添加https证书信任
- https信任所有证书
- https信任证书的三种方
- java https信任所有证书
- https下的证书信任
- https信任证书的三种方
- 安全证书不被信任
- 非信任机构的https证书,afnetworking 会报错解决办法:
- 非信任机构的https证书,afnetworking 报错解决办法
- Https双向证书申请
- iPhone HTTPS 访问非信任站点(使用非信任证书,untrusted certificate)
- TLS/HTTPS 证书生成与验证
- 解决GoAgent打开https网站SSL证书错误 (安全证书不受信任)
- 解决GoAgent打开https网站SSL证书错误 (安全证书不受信任)
- httpclient 无信任证书使用https
- 证书信任管理器(用于https请求)
- httpclient 无信任证书使用https
- 关于Cookie的理解
- 第十五周项目1-(3)-验证希尔排序算法
- 【 第16周项目3-归并排序算法的改进】
- Coding的使用
- Linux系统学习笔记(安装软件和异常处理)
- Https信任证书申请与非信任证书生成方式,适用于TLS双向安全校验
- 向字符数组a[100]写入“hello world”的三种方法
- Netty+websocket的客服聊天室
- .NET Core 中间件MiddleWare
- 死锁
- 第16周 项目1-验证算法(6)堆排序
- TCP首部
- 第十四周项目1—验证算法(二叉排序树)
- Android Studio中使用.9(Nine Patch)图片