192.168.1.1-路由器设置 | 192.168.0.1-无线路由器设置

公钥体系下的安全通信知识教程

发布时间:2015-09-18 09:16

 网络是一个开放的世界,服务器可以被不法节点冒名顶替,传输的数据可以被整个通路上的任何一个节点监听。要保证客户机和服务器在网络中通信的安全,客户机首先要验明服务器正身,然后还要加密要传输的数据,该数据到达服务器后再进行解密。整个过程在X.509规范的PKI(公钥体系,public key infrastructure)下得到完成,数据的加密解密由SSL(安全套接字层,Secure Socket Layer)或TLS(传输层安全,Transport Layer Security)实现。当客户机需要与某个服务器建立通信连接时,发生SSL握手:

 
客户机通过网络发送请求安全会话的消息(通常请求是HTTPS协议的形式)。服务器通过发送其X.509证书(包括公钥)进行响应。
客户机验证服务器证书的有效性,并检验该证书是否由可信任的CA(授权机构,Certification Authority)所签发。
当证书有效,客户机生成一次性的密钥,并用服务器的公钥对该密钥进行加密。然后,客户机把加密的会话密钥发送给服务器。
服务器用其私钥对其次进行解密,然后得到本次通讯的会话密钥。
客户机和服务器用其约定的会话密钥开始数据通信,直到一次会话结束。
 
话分两头细说,客户机和服务器。
 
【客户机】
 
通常服务器提供给客户机的证书都附有证书链,它是由一系列CA证书发出的证书序列,最终以根CA证书结束。客户机预先存储了一组可信任的根CA证书,服务器证书链的终结根CA证书若在其列,客户机即可确认该服务器可信任。在Windows查阅PC中存储的根CA证书,可以在命令行中键入
C:\> certmgr.msc
Java存储其根CA证书在其密钥库(keystore)$JAVA_HOME/jre/lib/security/cacerts中,keytool是管理密钥库的实用工具,密钥库的默认密码通常为changeit:
$ keytool -list -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit
客户机查询服务器的证书、测试能否用/etc/ssl/certs目录下存储的根CA证书与服务器成功完成SSL握手,可以执行如下OpenSSL的命令 http://www.luyouqiwang.com/xiaodu/
$ openssl s_client -showcerts -connect foo.server.com:443
$ openssl s_client -CApath /etc/ssl/certs -connect foo.server.com:443
 
【服务器】
 
基于Java技术的Web服务器通常以服务导向架构为蓝本,通过HTTPS协议将应用程序功能作为服务发送给客户机。通信传输协议的SSL握手过程中,服务器首先将其X.509证书发送给客户机,然后由客户机依据其存储的根CA证书验证该证书的真实性。Java内部维护一个keystore(密钥库),用以存储所有附有证书链的证书。
 
未完待续...
  • 上一篇:IT杂谈:关于封闭式开发
  • 下一篇:没有了
  • 关于我们 - RSS地图 - 最近更新 - 友情链接 - 网站地图 - 版权声明