ssl协议是如何解决这 用户发的报文签名的?

caddor9100 2015-10-15 04:04:05

1. 按照密码学教材的理论,数字证书存放的服务器签名用的公钥,

浏览器下载数字证书后,获取到公钥,有了这个公钥。 由于服务器发送的每个报文都签名了,

用公钥解“加密过的报文摘要”,然后验证报文是否被篡改。

这样似乎很安全了,有什么问题?

要说有问题, 浏览器发送报文给服务器(这个时候,浏览器成了发送方) ,它的报文谁签名?

它自己签名? 它如果签名,那么它的公钥如何让服务器知道?

有人说了,它也可以搞一个证书给服务器啊,事实上,我们上网,我们没有自己的证书啊。


2. ssl协议为什么能够解决我的问题1.
...全文
189 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
mLee79 2015-10-16
  • 打赏
  • 举报
回复
看不到 CA 是用来确认服务器身份的, 跟 密钥交换没关系么, 参与密钥交换的不管在啥时候都是服务器证书, 跟 CA 没关系 ... 那个提示是告诉你服务器是不可靠的.
caddor9100 2015-10-16
  • 打赏
  • 举报
回复
引用 12 楼 mLee79 的回复:
IE6 缺省使用 SSL2 SSL3 , 现在一些服务器配置成了只支持 TLS 了, IE6 当然就登不上. 你在 IE6里设置成使用 TLS应该就能连接了, 不过IE6应该只支持 TLS1.0, 不过你改抓包确认... CA 是用来确认服务器身份的, 跟 密钥交换没关系, 按照规矩, CA证书不应该在互联网上传播. 你跟服务器的通讯仍然是 https 加密的, 但是服务器是不能信任的...
当我用其他浏览器访问邮箱,勾选了ssl项目,这个时候,又是什么协议? http ? https ? 如果是后者, 由于公司自己做了个ca,自己搞证书,我的浏览器必须告警,似乎也没有提示我安装根证书。 按照大神的说话,它把网站的证书发到我计算机里,浏览器缓存了。 由于浏览器告警,”当我依然一意孤行“继续访问,这个时候,浏览器是什么行文? 它如何获取到网站的公钥? 按照ssl的握手,它需要用网站公钥来加密”前主密钥“,然后发送给网站。 由于证书不信赖,我也没有安装不信赖的根证书,至少我没有点击根证书的操作。 没有安装根证书,那么如何完成这个ssl握手呢?
mLee79 2015-10-16
  • 打赏
  • 举报
回复
IE6 缺省使用 SSL2 SSL3 , 现在一些服务器配置成了只支持 TLS 了, IE6 当然就登不上. 你在 IE6里设置成使用 TLS应该就能连接了, 不过IE6应该只支持 TLS1.0, 不过你改抓包确认... CA 是用来确认服务器身份的, 跟 密钥交换没关系, 按照规矩, CA证书不应该在互联网上传播. 你跟服务器的通讯仍然是 https 加密的, 但是服务器是不能信任的...
赵4老师 2015-10-16
  • 打赏
  • 举报
回复
分析通信必须要抓包。
caddor9100 2015-10-16
  • 打赏
  • 举报
回复
引用 7 楼 mLee79 的回复:
私钥应该永远不在互联网上传播, 正常的个人证书应该是 个人自己生产私钥 PKEY, 根据私钥填写信息后生成证书签名请求 CSR, 然后你把证书提交给 CA 签名生成证书, 得到证书后才是你自己用 私钥和证书打包成 PKCS#12 的个人
非常感谢兄台和楼下楼上的几个兄弟不厌其烦的回答。 昨晚又看了ssl的握手和通信。当然看归看,理论毕竟是理论。我喜欢试验性思考一些小问题。 希望大家别觉得我烦。 试验: 用古来的系统xp, 这机器很少装软件,登录某个公司邮箱,(某公司自己搞的邮箱,邮箱主页上出现coremail这个字),登录之前,我需要输入用户名和密码,密码这个编辑框下有个选项:"ssl登录“。 我勾选了该选项,结果无法接入该邮箱。只好把该选项去掉。结果我们的古老的ie浏览器就进入了。 由于ie版本非常古老,不像现在的浏览器 会在网址输入框的左侧提示红色或者绿色。(注:红色是说明 该邮箱的证书不可靠), 绿色(可靠)。 1. 证书是该公司自己做的,没有经过任何ca认证。那么为什么使用ie的时候,必须 去掉那个”ssl登录“选项才能进入系统。否则无法进入? 这个背后隐藏了什么知识? 你也许会问,因为ie强大。当ie 认为这个证书不可靠,所以无法使用ssl协议。 所以你登录不了,不奇怪。 2. 那么我换个浏览器试试, 这个浏览器从网上下载,新浏览器名字暂时不透漏, 我开始登录邮箱(默认勾选邮箱首页上的"ssl登录”)。 新浏览器登录进去了,网页左上角 出现红色告警(说明该证书不可靠,因为是公司自己给自己搞的一个证书)。 虽然提示不可靠,但我依然用ssl登录了进去了。 那么新浏览器,为什么可以登录呢? 3. 新浏览器访问邮箱的时候,按照ssl的理论, 会去下载服务器的数字证书,然后安装(因为没有根证书嘛), 这一切是在后台进行,用户不知道。 那么我用certmsg.msc打开windows的证书表看看,到底有没有安装该证书。 打开后,没有发现有该证书的关键字。既然没有安装,那么浏览器无法获取该邮箱的公钥, 自然无法用ssl协议和服务器握手,获取到通信用的对称密钥。 请问: 新浏览器进入邮箱,是伪https? 3个问题,希望有高手指教一下。
ForestDB 2015-10-15
  • 打赏
  • 举报
回复
几个基本的东西要先弄清楚: 非对称加密,A/B为一对密钥,A加密,B解密,或者反过来。 如果把A/B密钥对给予公/私之分,那么私钥加密,公钥解密,这是签名(验证);公钥加密,私钥解密,这是加密(安全传输)。 对于密钥,加上一些其它元信息,是以为证书;再加上证书链,是以为整个证书体系。 对称加密,双方持相同密钥,你加密我解密,反之亦然。 对于SSL/TLS,它其实分两个阶段: 协商阶段: 1、浏览器(客户端)验证服务器,要求严格的场景(比如网银),服务器也要验证客户端(所谓的双向认证)。 这里的验证,抛开证书的细节不谈,其实就是用的非对称加密中的“私钥加密,公钥解密” 2、通信双方协商出一个对称密钥,这里用到了“公钥加密,私钥解密” 通信阶段: 到此为止,双方应该相互信任(通过了认证),然后使用协商出来的对称密钥,对通信过程进行加密。
mLee79 2015-10-15
  • 打赏
  • 举报
回复
私钥应该永远不在互联网上传播, 正常的个人证书应该是 个人自己生产私钥 PKEY, 根据私钥填写信息后生成证书签名请求 CSR, 然后你把证书提交给 CA 签名生成证书, 得到证书后才是你自己用 私钥和证书打包成 PKCS#12 的个人证书.. 支付宝好像信不过大家的水平, 直接帮你生成私钥了..
mLee79 2015-10-15
  • 打赏
  • 举报
回复
私钥应该永远不在互联网上传播, 正常的个人证书应该是 个人自己生产私钥 PKEY, 根据私钥填写信息后生成证书签名请求 CSR, 然后你把证书提交给 CA 签名生成证书, 得到证书后才是你自己用 私钥和证书打包成 PKCS#12 的个人
mLee79 2015-10-15
  • 打赏
  • 举报
回复
支付宝的证书是 pkcs#12 的证书, 包含私钥和公钥, 并且私钥被标记为禁止导出.. 这个被服务器用来识别你的身份, 不用来做密钥交换 ... ssl 的握手过程:
      Client                                               Server

      ClientHello                  -------->
                                                      ServerHello
                                                     Certificate*
                                               ServerKeyExchange*
                                              CertificateRequest*
                                   <--------      ServerHelloDone
      Certificate*
      ClientKeyExchange
      CertificateVerify*
      [ChangeCipherSpec]
      Finished                     -------->
                                               [ChangeCipherSpec]
                                   <--------             Finished
      Application Data             <------->     Application Data
Server Certificate 包中包含服务器的证书, 在一些安全性要求不高的场合, 服务器证书都没有, 服务器公钥直接在 ServerKeyExchange 里发送, ClientKeyExchange 包含用服务器公钥加密的前主密文... 如果安装了客户端证书, 客户端证书在 Client Certificate 中发送, CertificateVerify 包含对之前的握手消息的签名...
caddor9100 2015-10-15
  • 打赏
  • 举报
回复
引用 4 楼 mLee79 的回复:
ssl 服务器证书是用来做密钥交换的, 没有每个包做签名... 密钥交换的过程是 客户端 选择 前主密文 , 用 服务器证书公钥加密, 发送给服务器, 服务器用私钥解码得到这个 前主密文, 然后按一定的算法获得所有的加密参数 ... 包的完整性是用 HMAC 来保证的... ssl 可以选择要求客户端证书, 这时候客户端用私钥对前面的握手消息签名, 这一般会在要求比较高的场合下使用, 比如网银啊, VPN 啥的时候... 这个证书也只是在握手的时候用...
你好,我昨天看了密码学书籍, 书上确实说数字证书是存放 发送端的 公钥。 你的意思是: ssl中用的证书, 和书上的有差异? ssl存放的有发送端的公钥和客户端用的私钥 ? 是这个意思吗
mLee79 2015-10-15
  • 打赏
  • 举报
回复
ssl 服务器证书是用来做密钥交换的, 没有每个包做签名... 密钥交换的过程是 客户端 选择 前主密文 , 用 服务器证书公钥加密, 发送给服务器, 服务器用私钥解码得到这个 前主密文, 然后按一定的算法获得所有的加密参数 ... 包的完整性是用 HMAC 来保证的... ssl 可以选择要求客户端证书, 这时候客户端用私钥对前面的握手消息签名, 这一般会在要求比较高的场合下使用, 比如网银啊, VPN 啥的时候... 这个证书也只是在握手的时候用...
www_adintr_com 2015-10-15
  • 打赏
  • 举报
回复
引用 2 楼 caddor9100 的回复:
1. 证书里私钥? 公钥是什么?公开的, 私钥自然不是公开的, 服务器把证书给了用户,证书里多了一个私钥,用户用它来加密报文。 当然,服务器也用它来解密。 这个恐怕有问题, 你上csdn, 登录的时候,网站然给你进入https(这个里有证书,只是你不知道自己已经安装了)。 我和你下载的证书都一样, 我们都知道该网站加密的私钥。 这太恐怖了。 另外: 最为对称加密的私钥,不应该是每次都通信后,就废弃它吗? 2. 我做个试验: 用一台古老的,干净的xp 去访问csdn,看会不会要求我安装证书。 试验的结果,似乎证书的安装时背后安装。
额,你说的证书是那种公开的证书哦 我说的是像支付宝这类证书,是要你登录后网站验证了你的身份后才让你下载的。而且也说明了里面的私匙和公匙并不是一对。整个过程中时两对秘钥,服务器用私匙 A 加密的数据客户端用公匙 A 解密,客户端用私匙 B 加密的数据服务器端用 公匙 B 来解密。 客户端的证书里面包含的是 公匙 A 和 私匙 B,是不成对的。 另外,你说的那种公开的证书,只是用来让客户端验证服务器的身份的,客户端并不用它来加密数据。客户端生成一个随机数,发给服务器,服务器用私匙加密后返回给客户端,客户端用证书里的公匙解密,看和加密的那个随机数是否相同,以此来验证服务器的身份。
caddor9100 2015-10-15
  • 打赏
  • 举报
回复
引用 1 楼 adlay 的回复:
[quote=引用 楼主 caddor9100 的回复:] 1. 按照密码学教材的理论,数字证书存放的服务器签名用的公钥, 浏览器下载数字证书后,获取到公钥,有了这个公钥。 由于服务器发送的每个报文都签名了, 用公钥解“加密过的报文摘要”,然后验证报文是否被篡改。 这样似乎很安全了,有什么问题? 要说有问题, 浏览器发送报文给服务器(这个时候,浏览器成了发送方) ,它的报文谁签名? 它自己签名? 它如果签名,那么它的公钥如何让服务器知道? 有人说了,它也可以搞一个证书给服务器啊,事实上,我们上网,我们没有自己的证书啊。 2. ssl协议为什么能够解决我的问题1.
首先,ssh 并不会把所有数据都用这种不对称算法来加密,因为这样效率太低了。而是先和服务器协商一个对称加密的密匙,之后的数据用这个密匙来加密,而协商密匙的过程才使用公匙私匙这种非对称的加密方法。 然后,你下载的证书除了包含一个解密服务器数据的公匙外,还包括一个加密数据的私匙,当然它们并不是一对的,每一个都需要和服务器上的那组才能形成一对。 这个你可以打开一个 .pem 证书文件来查看,里面都是文本形式的。 如果你从 IE 里面导出一个证书的时候也会提示你是否导出私匙, 由此可见证书里面除了公匙是还包含私匙的[/quote] 1. 证书里私钥? 公钥是什么?公开的, 私钥自然不是公开的, 服务器把证书给了用户,证书里多了一个私钥,用户用它来加密报文。 当然,服务器也用它来解密。 这个恐怕有问题, 你上csdn, 登录的时候,网站然给你进入https(这个里有证书,只是你不知道自己已经安装了)。 我和你下载的证书都一样, 我们都知道该网站加密的私钥。 这太恐怖了。 另外: 最为对称加密的私钥,不应该是每次都通信后,就废弃它吗? 2. 我做个试验: 用一台古老的,干净的xp 去访问csdn,看会不会要求我安装证书。 试验的结果,似乎证书的安装时背后安装。
www_adintr_com 2015-10-15
  • 打赏
  • 举报
回复
引用 楼主 caddor9100 的回复:
1. 按照密码学教材的理论,数字证书存放的服务器签名用的公钥, 浏览器下载数字证书后,获取到公钥,有了这个公钥。 由于服务器发送的每个报文都签名了, 用公钥解“加密过的报文摘要”,然后验证报文是否被篡改。 这样似乎很安全了,有什么问题? 要说有问题, 浏览器发送报文给服务器(这个时候,浏览器成了发送方) ,它的报文谁签名? 它自己签名? 它如果签名,那么它的公钥如何让服务器知道? 有人说了,它也可以搞一个证书给服务器啊,事实上,我们上网,我们没有自己的证书啊。 2. ssl协议为什么能够解决我的问题1.
首先,ssh 并不会把所有数据都用这种不对称算法来加密,因为这样效率太低了。而是先和服务器协商一个对称加密的密匙,之后的数据用这个密匙来加密,而协商密匙的过程才使用公匙私匙这种非对称的加密方法。 然后,你下载的证书除了包含一个解密服务器数据的公匙外,还包括一个加密数据的私匙,当然它们并不是一对的,每一个都需要和服务器上的那组才能形成一对。 这个你可以打开一个 .pem 证书文件来查看,里面都是文本形式的。 如果你从 IE 里面导出一个证书的时候也会提示你是否导出私匙, 由此可见证书里面除了公匙是还包含私匙的

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧