没有合适的资源?快使用搜索试试~ 我知道了~
SSL证书原理及格式1.21
需积分: 0 0 下载量 165 浏览量
2022-08-04
00:41:38
上传
评论
收藏 824KB PDF 举报
温馨提示
试读
13页
1.先在本地生成.key 密钥对文件,这个 xx.key 文件叫作密钥对文件(有些人称它为私钥 2.把 xx.key 密钥对文件里的公钥取出来,加上一些网站的身
资源详情
资源评论
资源推荐
SSL 证书原理及格式
SSL
数字证书是在我们上网时用来验证服务器的真实身份的。
SSL
是传输层的安全协议,
后来改进为
TLS
,不过它用的数字证书我们仍然称为
SSL
证书。
SSL 协议的简单原理如下:
客户端发送(自己支持的
ssl/tls
协议及相关参数)给服务端
服务端(选择其中一个协议版本及相关参数)发给客户端
服务端发送(自己的
ssl
证书)给客户端
客户端(在本地查找可靠的
ca
证书去验证服务端的证书是否可信)
若服务端证书可信
客户端发送(用服务端证书里的公钥去加密密钥交换的信息)给服务端
服务端发送(用服务端自己的私钥加密的密钥交换信息)给客户端
双方计算交换后的密钥(为对称的加密算法)
客户端用交换后的密钥发一些验证信息给服务端,服务端正确响应,则
SSL
验证通过。
接下来:
双方 使用对称的加密算法去加密正式的数据
当
ssl
会话到期后,再重新交换新的密钥
ssl
用到了非对称的密钥体制中的
RSA
算法,以及
DH
密钥交换算法(当然,这个密钥
交换可能升级了,不再是原来的
DH
算法了,可能是
ECDHE
),双方交换的是什么密钥?是
对称加密算法的密钥,具体是哪个对称加密算法是由
ssl
握手时协商的,可能是
DES
,也可
能是
AES
。
RSA 算法:
利用大整数因子分解的困难性
先随机生成
2
个大素数
p
和
q
,再计算
n=p*q
ψ(n)=(p-1)*(q-1)
随机数 e (0<e<ψ(n))满足 gcd(e,ψ(n))=1,即 e 与ψ(n)互素
计算 d=e
-1
mod ψ(n)
然后就得到 公钥 pub-key 为 e,n
私钥 pri-key 为 d,n
加密算法:密文=明文
e
mod n
解密算法:明文=密文
d
mod n
加密和解密是相对的,互逆的,当用 e 去加密时,就得用 d 去解密,当用 d 去加密时,就得
用 e 去解密。要想通过 e 得知 d 是不可能的,要想通过 d 得知 e 也是不可能的,所以服务端
生成了密钥对 ed(n)后,把其中的公钥给客户端,自己保留私钥,这样就可以互相加密解密
了,
服务端用私钥加密的信息,所有的客户端都可以看到,因为客户端很轻松就能获得服务端的
证书里的公钥,但客户端发的加密消息(用公钥加密),只有服务端能看到,因为私钥只存
在服务端手里。
所以 RSA 算法不是用来加密消息的,因为客户端都能看到服务端的消息,它只是用来做
数字签名的,顺便交换密钥。
、
DH 密钥交换算法
:
利用离散对数问题的难解性
q 为一个素数,a 为 q 的一个本原元,要交换密钥的双方 已知 a,q
Y = a
x
mod q
给出 x 容易算出 Y,给出得知 Y 时,反而不易(很难)算出 X
密钥交换过程如下:
用户 A 和用户 B 协商 q 和 a
用户 A 产生一个随机数 X(A)<q 用户 B 产生一个随机数 X(B)<q
用户 A 计算 Y(A)=a
x(A)
mod q 再把 Y(A)发给用户 B
用户 B 计算 Y(B)=a
x(B)
mod q 再把 Y(B)发给用户 A
用户 A 根据 B 发来的 Y(B)计算出 k=(Y(B))
X(A)
mod q
用户 B 根据 A 发来的 Y(A)计算出 k=(Y(A))
X(B)
mod q
然后,用户 A 和用户 B 算出的 k 是一样的,这个 k 就是交换后的密钥
当其他人截获了 AB 的信息,得知了 q,a,Y(A),Y(B)也无法计算出 k
因为其他人不知道 X(A)和 X(B),前面讲过,给出 Y,是不易算出 X 的。
密钥交换过程中就算使用明文,其他人也无法得知 AB 双方交换后的 k,比较安全,但
单纯使用密钥交换算法是无法应对中间人攻击的,所以得用上 RSA 算法,其中服务端使用私
钥去加密要交换的 Y(A),客户端用公钥去加密要交换的 Y(B),这样就可以应对中间人攻击,
接下来要信任的就是服务端了,因为其他人也可以宣称自己就是这个服务端,它做了流量的
劫持,不再做中间人了,自己替代了目标服务器。所以我们需要一个共同信任的机构,由这
个机构去对所有的其他服务器的公钥及相关信息做一个签名,生成一个证书,没错,就是
ssl 证书。
(这个交换的密钥是什么? 当然是对称的加密算法的密钥了,ssl 握手完成后,通信
双方就使用对称的加密算法去加密 正式的数据了,因为对称加密算法执行速度比非对称的
快)
签名
:
可信的 CA(验证机构)使用它的私钥把 其他服务端的(公钥及相关信息)加密(这就
叫签名),生成一个 ssl 证书,服务端收到 CA 发的证书后,部署到服务器上,当有客户请求
ssl 连接时,服务端再把这个证书给客户端,客户端用可信 CA 的公钥去解密此证书,解密
后的内容再和此证书上所宣称的信息一比对,就可得知此证书的真伪了。
可信 CA 的公钥存放在它的 CA 证书里,顶级 CA 证书是由它自己来签名的(中间 CA 的证书是
由上层 CA 来签名的)。可信的 CA 一般在操作系统安装时就放在操作系统里了。
话说我们凭什么就要相信这些 CA 呢?因为这个验证机制是人家最早提出并得到了广泛
使用的,不用它,还能用谁呢?
ssl 证书里都有哪些内容
呢?
ssl 证书文件里有 2 部分内容,一部分是明文的,含服务端的相关身份信息及 RSA 的公
钥还有表明由哪个 CA 给它签名的,以及密文的("服务端的相关身份信息及 RSA 公钥"的 hash
值)这个密文是由(明文里表明的)可信 CA 去加密的。
这样我们就可以从操作系统里找到此证书所说的那个 CA 的公钥,用这个 CA 的公钥去解
密此证书的密文部分,得出密文里的 hash 信息再和 根据此证书的明文部分计算出的 hash
比对,如果吻合则说明此证书可信。这样服务端的身份就可信了吗?其实没那么快就相信服
务端的身份,因为真实服务端的证书我们所有客户端都可以获得的,所以也有可能是其他人
用此证书去充当服务端,不过没关系,它没有服务端的私钥,所以我们在 ssl 验证时,在交
换完密钥后,会发一些验证消息,以验证服务端的真实性。因为如果伪造的服务端没有真实
服务端的私钥,它发过来的交换信息在客户端这边用真实服务端的公钥解密时,就不能正确
解密,所以完成密钥交换后,双方得到的 key 是不一致的。这样完成密钥交换后,再发一些
验证消息,这个伪造的服务端就被识破了。
当客户端找不到证书里表明的 CA 时,就会提示连接是不安全的,无法验证此网站的身份。
证书链
:
可信的 CA 只是少数的,后来申请 ssl 证书的人越来越多,于是这些顶级的 CA 又把签名
权下放到其他的商家那里,由其他商家充当中间 CA,我们现在申请的 ssl 证书一般都是中
间 CA 签名的,中间 CA 的证书是由顶层 CA 签名的。而我们操作系统里可能没有预装中间 CA
的证书,导致我们无法验证由中间 CA 签名的 ssl 证书,这时就需要网站服务端提供证书链,
从证书链中获取中间 CA 的证书,再从中间 CA 证书去找更上层直至顶层 CA 的证书。这样就
完成了最下层 ssl 证书的验证。
有时候浏览器会自作聪明地 自己去找中间 CA 的证书再去找顶级 CA,就是说它不看网
站服务端给的证书链了,它自己去找合适的证书链。这也就是 有时我们网站上的证书链明
明是 4 层的,结果在浏览器里只有 3 层 的原因了。(火狐浏览器可以导出它自己寻到的证书
链)
剩余12页未读,继续阅读
实在想不出来了
- 粉丝: 24
- 资源: 318
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0