打开SSL TCP套接字和发送Web请求

我有一个要求打开一个TCP套接字,并使用身份验证使用X.509数字证书的SSLv3或使用TLSv1 IP协议。

这是什么握手的过程涉及到什么呢? 我知道每一个消息应该被加密和我的私钥签名。 还有什么?

成功后,我已经送过来插座POST HTTP请求。

该服务器可以决定一段时间后关闭此套接字,如果处于非活动状态。 我需要能够重新打开,认证和再发送请求。

给我的证书是在以下信息PKCS12格式。

鉴定证书,证书公钥,证书私钥,证书颁发机构链

我是相当新的SSL有人可以提供指向如何去用Java或Spring集成实现这一点。

--------------解决方案-------------

良好的开端是看javax.net.ssl​​.HttpsURLConnection中的javadoc: http://download.oracle.com/docs/cd/E17476_01/javase/1.4.2/docs/api/javax/net/ssl/HttpsURLConnection.html

此外,您会需要使用密钥工具命令,将证书导入到密钥库中。

你并不需要了解握手,这是一切为你做。 阅读JSSE参考的建议,看看你做+ +担心。

关于TLS / SSL的细节,用于客户证书验证,与“正常”hanshake相比,该服务器发送一个额外CertificateRequest的TLS消息到客户端,其中响应其在随后的证书Certificate的TLS消息(以后,客户端发送一个CertificateVerify TLS消息,其中它签署其它消息用其私钥,以便证明它确实有私钥它发送的证书中的公钥服务器上。)注意,一旦握手完成后,该消息不加密私钥,但短暂的按键与服务器共享(同意在琴键上保密是握手的一部分也是如此)。

在实践中,你需要一个证书和私钥,包​​含在PKCS#12文件(例如),并配置它连接到服务器(服务器将根据其配置要求的话),当​​发送客户端。 它更容易认为你只需要一个证书,不会有做出一些证书之间选择,否则,你需要建立自己的X509TrustManager的范围内SSLContext

如果所有的连接都可能使用此证书,您可以使用默认设置,这HttpsURLConnection和默认SSLSocketFactory将回升。 这是可以做到的条件:

  • 设置javax.net.ssl.keyStorejavax.net.ssl.keyStoreType javax.net.ssl.keyStorePassword与设置在命令行系统属性。 我会建议不要因为别人的机器上可能会看到在命令行设置通过上市进程(根据机器的配置),
  • 在应用程序中设置的系统属性,
  • 初始化一个SSLContext ,并通过将其设置为默认的SSLContext.setDefault(..) 6中)。

需要注意的是的.p12(PKCS#12)文件支持的密钥库开箱即用,所以你不需要做任何转换keytool ,只要使用PKCS12作为存储类型。

如果你需要使用这些设置,或者,你可以初始化一个SSLContext ,创建SSLSocketFactory距离,然后配置的实例HttpsURLConnection如果你使用的是什么)与setSSLSocketFactory

(您可能能够使用的工具,如jSSLutils帮助建立SSLContext

分类:java的 时间:2012-01-22 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 2.066 (s). 10 q(s)