一图说明HTTPS请求过程

私钥、公钥、证书?

下面以Openssl生成SSL证书的过程来说明基本概念:

在这里插入图片描述

1.生成server.key(私钥)

$ openssl genrsa -des3 -out server.key 2048

以上命令是基于des3算法生成的rsa私钥;在生成私钥时必须输入至少4位的密码。2048是指定要生成的私钥的长度,默认为1024。

2. 生成无密码的server.key

$ openssl rsa -in server.key -out server.key

因为第一步中生成的key是有密码的,每次Apache启动Web服务器时,都会要求输入密码,这显然非常不方便,所以要删除私钥中的密码。

3.生成csr(证书签名申请)

$ openssl req -new -key server.key -out server.csr -config openssl.cfg

CSR 是Certificate Signing Request的缩写,即证书签名请求,这不是证书,生成过程会要求输入国家、省份、城市、公司、部门及邮箱等信息。

3.生成CA的crt

$ openssl req -new -x509 -key server.key -out ca.crt -days 365

X.509证书的认证者总是CA或由CA指定的人,所以得先生成一个CA的证书。

4.基于ca.crt生成csr(证书/公钥)

创建csr文件之后,可以有两种选择。理想情况下,可以将证书发送给证书颁发机构(CA),CA验证过请求者的身份之后,会出具签名证书(通常要收费)。如果只是内部或者测试需求,也可以使用OpenSSL实现自签名

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

通过以上流程可以看出:
私钥就是用户通过一个算法和密码生成的一个base64字符串;
公钥就是申请得到的证书(由于证书的来源包含私钥,所以又有人称证书包括公钥证书和私钥证书)

HTTPS请求流程

在这里插入图片描述

HTTPS请求流程:
① 客户端发起https请求,请求包含客户端支持的SSL版本、加密算法等信息,访问默认的443端口进行证书获取
② 服务端存放了公钥证书和私钥证书,返回公钥证书、选择的加密算法(服务端会从客户端支持的加密算法和服务端本身支持的加密算法中选择一个最安全的加密算法)等信息给客户端
③ 客户端验证收到的公钥证书是否有效,如果无效,会显示警告信息
④ 客户端验证公钥证书有效后,会根据公钥证书生成一个随机值key,用来以后跟服务端加密通讯的密钥
⑤ 客户端用公钥加密随机值key并发送给服务端
⑥ 服务端收到加密的key后,用私钥证书解密
⑦ 服务端得到解密后的key,就知道以后用这个key来跟客户端进行加密通讯
⑧ 服务端用选中的加密算法对key和响应信息进行加密后发送给客户端
⑨ 客户端收到响应后,用服务端选中的加密算法对收到的内容进行解密。至此,https请求握手动作完成
⑩ 客户端再次发起请求时,用选中的加密算法和key对请求内容进行加密发送
⑪ 服务端再次收到请求时,用选中的加密算法和key对请求内容进行加密

可以看出,https在传输证书和密钥的过程中,因为要绝对保证安全,用的是非对称加密方法;
在正式数据传输的时候,考虑到传输效率,用的是对称加密

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值