`
luckliu521
  • 浏览: 258832 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

SSL Socket双向认证的实现

 
阅读更多
SSL Socket双向认证的实现 

一、        SSL概述

SSL协议采用数字证书及数字签名进行双端实体认证,用非对称加密算法进行密钥协商,用对称加密算法将数据加密后进行传输以保证数据的保密性,并且通过计算数字摘要来验证数据在传输过程中是否被篡改和伪造,从而为敏感数据的传输提供了一种安全保障手段。

SSL协议提供的服务主要有:

1)认证用户和服务器,确保数据发送到正确的客户机和服务器

认证用户和服务器的合法性,使它们能够确信数据将被发送到正确的客户机和服务器上。客户机和服务器都有各自的识别号,这些识别号由公开密钥进行编号,为验证用户是否合法,SSL协议要求在握手交换数据时进行数字认证,以此确保用户的合法性。

2)加密数据以防止数据中途被窃取

SSL协议所采用的加密技术既有对称密钥技术,也有公开密钥技术。在客户机和服务器进行数据交换前,交换SSL初始握手信息,在SSL握手信息中采用了各种加密技术对其进行加密,以保证其机密性和数据的完整性,并且用数字证书进行鉴别,这样就可以防止非法用户进行破译。

3)维护数据的完整性,确保数据在传输过程中不被改变

SSL协议采用Hash函数和机密共享的方法提供信息的完整性服务,建立客户机和服务器之间的安全通道,使所有经过SSL协议处理的业务在传输过程中能全部完整准确无误的到达目的地。



SSL体系结构:

SSL协议位于TCP/IP协议模型的网络层和应用层之间,使用TCP来提供一种可靠的端到端的安全服务,它是客户/服务器应用之间的通信不被攻击,并且始终对服务器进行认证,还可以选择对客户进行认证。SSL体系结构如图1所示。




在SSL通讯中,首先采用非对称加密交换信息,使得服务器获得浏览器端提供的对称加密的密钥,然后利用该密钥进行通讯过程中信息的加密和解密。为了保证消息在传递过程中没有被篡改,可以加密HASH编码来确保信息的完整性。SSL通讯过程,如图2所示。




一般情况下,当客户端是保密信息的传递者时,客户端不需要数字证书验证自己身份的真实性,如电子银行的应用,客户需要将自己的账号和密码发送给银行,因此银行的服务器需要安装数字证书来表明自己身份的有效性。在某些应用中,服务器端也需要对客户端的身份进行验证,这时客户端也需要安装数字证书以保证通讯时服务器可以辨别出客户端的身份,验证过程类似于服务器身份的验证过程。



三、SSL Socket双向认证的实现

SSL Socket通信是对Socket通信的拓展。在Socket通信的基础上添加了一层安全性保护,提供了更高的安全性,包括身份验证、数据加密以及完整性验证。

SSL Socket双向认证实现技术: JSSE(Java Security Socket Extension),它实现了SSL和TSL(传输层安全)协议。在JSSE中包含了数据加密,服务器验证,消息完整性和客户端验证等技术。通过使用JSSE,可以在客户机和服务器之间通过TCP/IP协议安全地传输数据。为了实现消息认证:

服务器端需要:

   1、KeyStore: 其中保存服务器端的私钥

   2、Trust KeyStore: 其中保存客户端的授权证书

客户端需要:

    1、KeyStore:其中保存客户端的私钥

    2、Trust KeyStore:其中保存服务端的授权证书



密钥和授权证书的生成方法:

使用Java自带的keytool命令,在命令行生成。

1、生成服务器端私钥kserver.keystore文件

  keytool -genkey -alias serverkey -validity 1 -keystore kserver.keystore

2、根据私钥,导出服务器端安全证书

keytool -export -alias serverkey -keystore kserver.keystore -file server.crt 

3、将服务器端证书,导入到客户端的Trust KeyStore中

keytool -import -alias serverkey -file server.crt -keystore tclient.keystore

4、生成客户端私钥kclient.keystore文件

  keytool -genkey -alias clientkey -validity 1  -keystore kclient.keystore

5、根据私钥,导出客户端安全证书

keytool -export -alias clientkey -keystore kclient.keystore -file client.crt

6、将客户端证书,导入到服务器端的Trust KeyStore中

keytool -import -alias clientkey -file client.crt -keystore tserver.keystore

     

生成的文件分成两组,服务器端保存:kserver.keystore tserver.keystore 客户端保存:kclient.keystore  tclient.kyestore。



客户端采用kclient.keystore中的私钥进行数据加密,发送给服务端,服务器端采用tserver.keystore中的client.crt证书对数据解密,如果解密成功,证明消息来自可信的客户端,进行逻辑处理; 服务器端采用kserver.keystore中的私钥进行数据加密,发送给客户端,客户端采用tclient.keystore中的server.crt证书对数据解密,如果解密成功,证明消息来自可信的服务器端,进行逻辑处理。如果解密失败,那么证明消息来源错误。不进行逻辑处理。



SSL Socket双向认证的安全性:

(1)可以确保数据传送到正确的服务器端和客户端。

(2)可以防止消息传递过程中被窃取。

(3)防止消息在传递过程中被修改.。



在系统运行中可能出现以下情况:

(1)   服务器端、客户端都持有正确的密钥和安全证书,此时服务器端和客户端可以进行正常通信。

(2)   客户端的密钥和安全证书不正确,此时服务器端和客户端不可以进行正常通信。

(3)   客户端未持有密钥和安全证书,此时
  • 大小: 7.4 KB
  • 大小: 34.7 KB
分享到:
评论
2 楼 luckliu521 2012-05-19  
呵呵,这段时间正好在研究这个,把知道的就先记录下,省得回头又忘了
1 楼 spiritcorpse 2012-05-18  
非常有价值!

相关推荐

    SSL Socket双向认证的实现.doc

    SSL Socket双向认证的实现 SSL 协议采用数字证书及数字签名进行双端实体认证,用非对称加密算法进行密钥协商,用对称加密算法将数据加密后进行传输以保证数据的保密性,并且通过计算数字摘要来验证数据在传输过程中...

    Java ssl socket 双向认证

    在这个场景中,我们讨论的是如何在Java中设置和实现SSL套接字的双向认证。双向认证通常在高安全性环境中使用,例如银行、政府机构或企业内部网络,因为它们需要确保通信双方都是可信的。 首先,为了实现双向认证,...

    SSLSocket双向认证通信示例(含证书库及证书).zip

    "ssl_client"和"ssl_server"是Java源代码文件,它们包含了实现SSLSocket双向认证的逻辑。在这些代码中,客户端会加载"ejbcakclient.jks",服务器则加载"ejbcakserver.jks"。客户端在建立连接时,不仅会提供自己的...

    Java实现SSL双向认证的方法

    实现Java SSL双向认证通常涉及以下几个步骤: 1. **生成密钥库(KeyStore)**: - 服务器端需要一个KeyStore,存储其私钥,通常使用`keytool`命令生成,例如:`keytool -genkey -alias serverkey -keystore ...

    JAVA实现的SSL/TLS双向认证源代码

    4. **客户端实现**:对应的`TeslaSSLClient`类则需要配置SSLSocket,同样使用自定义的`SSLContext`。客户端在建立连接时会提供自己的证书。 5. **测试**:在完成上述步骤后,你可以使用wss(WebSocket Secure)协议...

    SSL双向认证java实现

    SSL 双向认证 Java 实现 SSL 双向认证是指在客户端和服务器端之间的通信过程中,双方都需要对对方进行身份验证和授权,以确保通信的安全性。Java 语言提供了 JSSE(Java Security Socket Extension)来实现 SSL ...

    利用C#实现SSLSocket加密通讯的方法详解

    「C#实现SSLSocket加密通讯方法详解」 在网络通讯中,安全性是一个非常重要的方面,而SSL/TLS协议则是最常用的加密通讯协议之一。C#作为一个强大的编程语言,可以轻松地实现SSL/TLS协议的加密通讯。下面将详细介绍...

    java实现-SSL双向认证1.docx

    4. **Java代码实现**:在Java中,可以使用JSSE(Java Secure Socket Extension)来配置SSL上下文并创建SSLServerSocket或SSLSocket。在服务器端,需要设置KeyManagerFactory和TrustManagerFactory,它们分别处理...

    易语言SSL双向认证

    易语言SSL双向认证源码,SSL双向认证,设置证书文件,连接,取Socket句柄,建立SSL连接,断开连接,取服务器IP,发送数据,取回数据,取消息类型,标记参数是否正确,取服务端SSL算法,服务端是否有证书,取服务端证书内容,启动...

    activemq ssl双向认证连接

    SSL(Secure Socket Layer)是用于确保网络通信安全的一种标准协议,而双向认证(Mutual SSL/TLS Authentication)则进一步增强了这种安全性,它要求服务器验证客户端的身份,同时也要求客户端验证服务器的身份。...

    客户端与服务器SSL双向认证(客户端:java-服务端:java)

    - 配置SSLSocket:通过SSLContext的getSocketFactory()方法创建SSLSocket,连接到服务器。 4. **握手过程**: - 客户端初始化SSL连接,发送其证书和公钥给服务器。 - 服务器验证客户端的证书,如果接受,则发送...

    SSL 双向认证的配置总结

    SSL(Secure Socket Layer)双向认证是一种安全通信协议,它不仅要求服务器验证客户端的身份,同时也要求客户端验证服务器的身份。这种机制增强了网络通信的安全性,尤其在金融、医疗等对数据安全有高要求的领域中...

    Openssl Socket实现SSL双向认证连接 -易语言

    总结来说,使用OpenSSL通过Socket实现SSL双向认证连接涉及证书的生成、SSL上下文的配置、Socket连接的建立和SSL握手的执行。在易语言环境下,可以借助提供的库文件和示例代码实现这一功能,从而为网络通信提供安全的...

    Java SSLSocket的使用

    - **CertificateRequest**(可选):服务器可能请求客户端的证书进行双向认证。 - **ServerKeyExchange和ServerHelloDone**:服务器发送用于计算会话密钥的参数,然后告诉客户端握手过程即将结束。 - **...

    IOS,Android SSL双向认证HTTPS方式请求及配置证书

    总结,iOS和Android应用实现SSL双向认证HTTPS请求涉及到证书的创建、导入、配置以及自定义安全策略。开发者必须理解SSL/TLS的工作原理,以确保数据传输的安全性,同时兼顾用户体验。在实际应用中,建议遵循最佳实践...

    netty的SSL双向认证

    在Netty中实现SSL双向认证,我们需要以下步骤: 1. **生成证书**:首先,为服务器和客户端分别生成数字证书。这通常包括创建私钥和公钥,然后使用证书签名请求(CSR)将公钥提交给受信任的证书颁发机构(CA)进行...

    ssl双向认证密钥

    在SSL双向认证中,不仅服务器需要验证客户端的身份,客户端也需要验证服务器的身份,从而提供了更高级别的安全保护。这种模式通常在银行、企业内部网络或高度敏感的信息交换中使用。 在SSL双向认证中,涉及的主要...

    易语言源码易语言SSL双向认证源码.rar

    在本压缩包“易语言源码易语言SSL双向认证源码.rar”中,包含了使用易语言实现SSL(Secure Socket Layer)双向认证的源代码。SSL是网络安全传输协议,广泛应用于网络通信,如HTTPS,确保数据在网络中传输时的加密和...

    ssl_socket.zip_SSL SOCKET_ca证书验证 ssl套接字通信_sSLSocket和socket_ssl通信

    ssl套接字通信服务端和客户段 ssl单向认证、双向认证

Global site tag (gtag.js) - Google Analytics