当下的互联网应用如果是外网访问,一般都是https方式访问,需申请https证书

目录

  • Why https ?
  • What is https?
    • 1. A 通过浏览器访问 B 服务端443端口,并随身携带如下信息一并传递给B
    • 2. B 收到A发来的携带信息,B 将做如下几件事情:
    • 3. A 收到 B 发来的https证书,将验证证书的合法性
    • 4. A 验证证书合法后,将下面的信息发给B
    • 5. B 得到 A 发过来的信息做最后的回应
  • How to create https ?

Why https ?

http 明文传输不安全,因此需要进行加密处理,加密后端http就是https

What is https?

https 涉及很多概念,对称非对称加密 、CA、 数字签名、 证书 等等。

有兴趣查看 这里漫画解说https 这个只能快速了解https大致原理。
建议查看 https加密原理 https://www.jianshu.com/p/cf2f86bc597a ,内容比较多比较细,但很多点讲解到位。

这里简要总结:
A (客户端浏览器) ------通过 https://www.xxx.com 访问------> B(服务端网站)

1. A 通过浏览器访问 B 服务端443端口,并随身携带如下信息一并传递给B

携带项 说明
随机数1 最后用于生成AB之间对称加密的密钥
自己支持的 SSL 版本号 比如TLS 2.0版
自己支持的 加密算法 对称加密和非对称加密
支持的压缩算法

2. B 收到A发来的携带信息,B 将做如下几件事情:

事件项 说明
确认使用的加密通信协议版本 比如TLS 1.0版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信
将生成一个随机数2发给A 最后用于生成AB之间对称加密的密钥
确认使用的加密方法 比如RSA公钥加密
将https证书(Certificate)发给A 该证书从CA(全球权威证书颁布机构)申请
支持的一些SSL/TLS扩展

------------->>>>> 关键问题1:B 的证书哪里来的?
答案是从CA(权威证书颁布机构)申请的,CA颁发给B的证书中包含了如下信息:

包含项 说明
颁发机构 例如是 Let’s Encrypt
B的域名 www.xxx.com
证书有效期 有效期 从 yyyy-MM-dd 到 yyyy-MM-dd
经过CA私钥加密后的B的公钥 A需要通过CA的公钥解密才能最终获得B的公钥
经过CA私钥加密后的数字签名 数字签名 是A用来验证该证书是否合法是否被篡改等

3. A 收到 B 发来的https证书,将验证证书的合法性

------------->>>>> 关键问题2:A 浏览器如何校验 https证书的有效性 ?

 (1) 浏览器内置了各大颁发机构的公钥,通过证书中的颁发机构找到对应的【CA公钥】(2) 浏览器用【CA公钥】解密CA私钥加密后的数字签名得到 【密文信息1】这里说明一下 【密文信息1】是CA对【B的公钥】【B的域名】等信息整合在一起,进行数字摘要算法(例如MD5算法) 所获得的。(3) 浏览器用【CA公钥】解密CA私钥加密后的B的公钥得到 【B的公钥】(4) 浏览器用和CA相同的数字摘要算法对【B的公钥】【B的公钥】【B的域名】等信息进行相同的数字摘要 从而生成【密文信息2】(5) 对比【密文信息1】 和  【密文信息2】是否一致一致则验证通过,否则失败,证书不可信。另外浏览器还会校验证书的有效时间和域名匹配等。

4. A 验证证书合法后,将下面的信息发给B

发送项 说明
随机数3 用【B的公钥】加密,防止被窃听 , 该随机数也是用于AB之间对称加密的密钥
编码改变通知 表示随后的信息都将用双方商定的加密方法和密钥发送
握手结束通知 表示客户端的握手阶段已经结束

5. B 得到 A 发过来的信息做最后的回应

发送项 说明
用B的私钥解密A发来的加密随机数3 此时 A 和 B 同时具备了 上面步骤中的 3个随机数,按照编码改变通知指示生成一个对称加密密钥(例如 DES AES等)
生成一个 New Session Ticket 类似于sessionId AB之间不可能每次都认证加密解密,因此一段时间内同一个 Session Ticket 下将不再进行重复的认证过程
服务端传输改变通知 表示知晓加密方式,加密密钥,准备开始传输报文
服务端发送第一个加密报文

. ------------->>>>> 关键问题3: A如何生成对称加密的密钥 ? 如何发给B ?
问题 1 答案
根据上面的流程1、2、4 可知A不是只简单生成一个随机数发给B,
而是集三次随机数(A 发送2个随机数给 B,B发送1个随机数给A)于一体,通过协商的一致算法生成一个对称加密的密钥进行通信。

这里的对称加密密钥生成算法比较复杂一些,不是我们通常认知以为就是一个简单的随机数,具体查看相关文档,这里只做简单记录。

问题 2 答案
对称加密密钥不用发给B,A和B都有了相同的三个随机数,A和B 都会用DH算法计算出一个master secret,这个master secret就是对称加密密钥。

一片不错的文章参考: https://blog.csdn.net/qq_31442743/article/details/116199453

以上步骤中,黑客想要中间截胡伪造B的证书给A是几乎不可能的,因为无法获得CA的私钥
A浏览器只会用CA的公钥对证书解密获得签名信息,验证域名,比对签名信息,验证有效期等
如果A非要使用非权威机构CA颁发的证书,那就没办法保证安全了,浏览器一般标红或阻止访问没有经过权威机构CA颁发的证书的网站。

How to create https ?

要想http 访问方式变成 https 网上流程说明很多,总结一下主流步骤:

  1. 准备好经过认证后的域名
  2. 去权威网站(如 Let’s Encrypt 或各云平台)申请域名对应的https证书
  3. 配置你的应用服务器(如nginx)将获得的https证书文件集成到应用中
  4. 配置监听443端口,重启应用服务器,刷新浏览器

这里说明一下,之前说的什么生成CSR文件然后去CA怎么怎么搞的都老土了!
CSR即证书请求文件, 就是根据提供的公钥私钥,一堆公司地址信息等,到CA申请证书一般很多卖https证书的网站都一套连搞定了!

例如在nginx中配置相关信息,类似于下面【server】区域的配置:

# HTTPS server#server {listen       443 ssl http2;server_name  www.xxxxx.com;ssl_certificate /apps/nginx/fullchain.crt;ssl_certificate_key /apps/nginx/private.pem;ssl_protocols TLSv1.1 TLSv1.2;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;ssl_prefer_server_ciphers on;ssl_session_cache shared:SSL:10m;ssl_session_timeout 10m;location / {root   /apps/nginx/html;index  index.html index.htm;}

其中的 :

        ...ssl_certificate /apps/nginx/fullchain.crt;ssl_certificate_key /apps/nginx/private.pem;...

里面有 fullchain.crt; private.pem; 这两个文件,这到底是什么? 还有一般云平台 提示私钥格式不正确,请提供RSA格式的证书错误是怎么回事?

这里先列出 一般免费https证书 网站 申请通过后,下载下来的压缩包中的文件种类说明:

文件 说明
private.pem 私钥,可更改后缀为key
fullchain.crt 包含了公钥的CA证书,可更改后缀为pem
certificate.pfx IIS和Tomcat使用,秘钥在detail.txt中
certificate.crt 域名证书,一般不用

SSL/TLS 小知识点:

SSL/TLS  是一种安全加密协议, TLS是SSL的标准化、升级版本(SSL存在一些缺陷)SSL目前有三个版本,SSL1.0、SSL2.0、SSL3.0,因其存在严重的安全问题,大多数公司目前均已不在使用了。TLS目前也有三个版本,TLS1.0、TLS1.1、TLS1.2,TLS目前只是草案,并未面世,目前常用的为TLS1.2,server配置通常三个版本均支持

报 “xxxRSA格式的文件xxx”错误时没有弄明白 RSA 几种加密形式
其实就是 RSA私钥格式PKCS1和PKCS8之间的相互转换

参看 https://www.jianshu.com/p/08e41304edab

一般 PKCS1格式文件内容如下:

-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQC5BW6T9GVaaG/epGDjPpY3wN0DrBt+NojvxkEgpUdOAxgAepqe
GbSqtXAd+MOOBbHxIOEwrFC9stkypQgxrB49tXDI+4Jj8MuKI15HEmI8k7+tRDOl
J5TFSL2J9KA3GuQbyVAhlpxl+YnV7yjxP9l1dkbApg1ixSd5KOPbaQ00WQIDAQAB
AoGAYiqzpOTC8dj/og1tKqUGZsZ5fX1PiQO+XBnAbGXFE2sozPhAGSpiZUCnH//h
IfV7mAht8rk6java+bf+RPyhfg0zW7oXy0pm8DwoW7+0fOzQ4sEYeoqza/VrkYwR
5BxBa+KyT1HCi4uXogyDlQT1p0ZT0iaqZBfTApdyVkmcQEECQQDhfPl+ILl0bh0H
8ORoMmmxAZMn293+de441OlAjL3CsF4yhUUdavAYWM0RAV5MJtKUTR4ZpRXkB/pq
kgyTxpr9AkEA0g6pQRpcGxulr2758ZlOLdL8B1n1ubre464IKQ0zNfERKhR/j7U8
LGF+3mhZuoSEdklwLCJ8ZMvIhkV0v8JjjQJBANtqXOyas1vUenNruRabV7ViLuuu
S0p9Px4WMBMb4Ns9+6t1e1ew44kNgB54EmZPsMGWeR/DQJXwHYDuNUbnD5ECQA7S
Gf8N7RG8kaQfIGN7fZieGkoqfrvsA23tCYZb+BEGQT/G0nlBQE2hU2I92pbeYro1
1ERI6p3yAuP2YpZlEMECQGNzhqshYfDiWwU4Q3aZWkRrv74uIXk1HQoFH1BthzQJ
TbzKH/LEqZN8WVau3bf41yAx2YoaOsIJJtOUTYcfh14=
-----END RSA PRIVATE KEY-----

一般 PKCS8格式文件内容如下:


-----BEGIN PRIVATE KEY-----
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALkFbpP0ZVpob96k
YOM+ljfA3QOsG342iO/GQSClR04DGAB6mp4ZtKq1cB34w44FsfEg4TCsUL2y2TKl
CDGsHj21cMj7gmPwy4ojXkcSYjyTv61EM6UnlMVIvYn0oDca5BvJUCGWnGX5idXv
KPE/2XV2RsCmDWLFJ3ko49tpDTRZAgMBAAECgYBiKrOk5MLx2P+iDW0qpQZmxnl9
fU+JA75cGcBsZcUTayjM+EAZKmJlQKcf/+Eh9XuYCG3yuTqNq9r5t/5E/KF+DTNb
uhfLSmbwPChbv7R87NDiwRh6irNr9WuRjBHkHEFr4rJPUcKLi5eiDIOVBPWnRlPS
JqpkF9MCl3JWSZxAQQJBAOF8+X4guXRuHQfw5GgyabEBkyfb3f517jjU6UCMvcKw
XjKFRR1q8BhYzREBXkwm0pRNHhmlFeQH+mqSDJPGmv0CQQDSDqlBGlwbG6Wvbvnx
mU4t0vwHWfW5ut7jrggpDTM18REqFH+PtTwsYX7eaFm6hIR2SXAsInxky8iGRXS/
wmONAkEA22pc7JqzW9R6c2u5FptXtWIu665LSn0/HhYwExvg2z37q3V7V7DjiQ2A
HngSZk+wwZZ5H8NAlfAdgO41RucPkQJADtIZ/w3tEbyRpB8gY3t9mJ4aSip+u+wD
be0Jhlv4EQZBP8bSeUFATaFTYj3alt5iujXUREjqnfIC4/ZilmUQwQJAY3OGqyFh
8OJbBThDdplaRGu/vi4heTUdCgUfUG2HNAlNvMof8sSpk3xZVq7dt/jXIDHZiho6
wgkm05RNhx+HXg==
-----END PRIVATE KEY-----

PKCS1/8 小知识点:

借用网上的评论:
通俗点讲吧,PKCS1是标准RSA秘钥对标准规范,但是都是裸奔的;PKCS8是对加密后的秘钥进行了描述,就是说P8格式的秘钥不是裸奔了

申请https证书相关说明相关推荐

  1. 申请https证书要多久

    目前,网站https加密已经发展成为了一种趋势,而且是网站提升安全等级必不可少的工具.通过安装https证书,网站的数据传输可以防止被窃取或者是非法篡改,而且浏览器对这样的网站还会提升其收录情况.不过 ...

  2. 关于NodeJS配置HTTPS服务、阿里云申请HTTPS证书

    最新一直在折腾小程序 我是前后台一起做,前台不必说是微信的小程序,后端的用的是NODEJS. 所以就说一下NODEJS如何配置HTTPS服务 我的NODE用的是Express框架 直接上代码: 最重要 ...

  3. 如何在宝塔面板启用 ASP.NET CORE 网站并自动申请 HTTPS 证书

    要想在 Linux 上部署 ASP.NET CORE 网站,除了使用"宇内流云"大神的 Jexus 之外就是使用 Nginx 对 ASP.NET CORE 网站进行反向代理. 常规 ...

  4. 申请HTTPS证书流程

    HTTPS证书需要由可信颁发机构签发才可以被浏览器及操作系统信任,目前广泛被世界认可的国际机构有:GlobalSign.DigiCert.Sectigo比较常见,这里的指的这些机构条件是指兼容性99. ...

  5. 申请https证书的过程

    现在很多的网站都会用​​https证书申请​​了,因为https证书好处现在越来越受到人们的认知,https安全证书的好处不仅仅对于客户的信息隐私数据有保护,对于维护网站的知名度以及安全可信度也是大有 ...

  6. 用certbot申请https证书

    安装certbot yum install epel-release yum install snapd systemctl enable --now snapd.socket ln -s /var/ ...

  7. 免费申请 HTTPS 证书,开启全站 HTTPS

    HTTP 报文以明文形式传输,如果你的网站只支持 HTTP 协议,那么就有可能遭受到安全攻击.你可以使用 Google 浏览器打开一个 HTTP 协议网站,会发现 Chrome 在网址的左边将这个网站 ...

  8. 免费申请HTTPS证书六大方法

    1.阿里云 推荐指数:★★☆☆☆ 免费证书类型:DV 域名型 免费证书品牌:DigiCert(原赛门铁克(Symantec)) 免费通配符证书:不支持 易操作性:简单 证书有效期: 1年 自动更新:不 ...

  9. docker certbot 一键申请https证书、证书过期续订、续订成功自动重启服务

    前言 基于**certbot-letencrypt-wildcardcertificates-alydns-au**项目封装为docker镜像, 感谢 ywdblog 的源码 镜像支持一键生成证书.证 ...

最新文章

  1. 路由器mstp多域配置举例
  2. s2sh乱码一个小处理(新手按流程走)
  3. 《Effective C#》Item 17:减少装箱(Boxing)和拆箱(Unboxing)操作
  4. zabbixproxy安装
  5. 如何计算给定一个unigram语言模型_CS224n笔记[5]:语言模型(LM)和循环神经网络(RNNs)...
  6. 201521123018 《Java程序设计》第3周学习总结
  7. 工作是为了让生活过得更好(转)
  8. backlog配置_Nginx backlog配置概述
  9. [视频]K8飞刀 SQL注入点脱库演示教程
  10. DB2完整的SQLCODE和SQLState错误信息
  11. rs485接口上下拉_RS485上拉下拉电阻计算详解
  12. 深度学习软件安装及环境配置(Win10)
  13. Istio 东西向流量管理
  14. 尼日利亚4g频段_世界各国全球主要4g频段资料
  15. 白杨SEO:QQ群SEO是什么?QQ群排名如何做引流与营销?【举例】
  16. NLP一些常见的专有名词
  17. elment中走马灯与满屏图片实现
  18. neko虚拟机对象文档与扩充
  19. 软件测试,软件测试练习题
  20. python从键盘输入10个整数算出奇数偶数的和_画出流程图,并编程实现: 从键盘上输入10个整数型的数值,分别统计奇数和偶数的个数。_概率论与数理统计答案_学小易找答案...

热门文章

  1. 《微信小程序-证件照换底色》之三:微信小程序接收django的图片并部署到windows服务器上
  2. Excel函数sumproduct应用案例-多条件求和
  3. Net-MVC+EasyUI之 TinyMCE使用
  4. 让华为小米抱团 统一推送联盟究竟是何方神圣?
  5. 深度学习(二、全连接网络FNN)
  6. python发音小程序
  7. 《自然》杂志:面对“电车难题”,不同国家的人有不同的道德选择
  8. 微信开发之网页返回关闭浏览器
  9. ARM与Calxeda/华芯通
  10. win10彻底关闭更新