2010-07-15 96 views
0

我有要求打开一个TCP套接字并使用SSLv3或TLSv1 IP协议使用X.509数字证书进行身份验证。打开SSL TCP套接字并发送Web请求

这个握手过程究竟涉及什么?我知道每封邮件都应该加密并用我的私钥签名。还有什么?

成功后,我必须通过套接字发送POST HTTP请求。

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

给予我的证书采用PKCS12格式,并附有以下信息。

证书识别 ,证书公钥 ,证书私钥 ,证书颁发机构链

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

回答

0

你不需要知道握手,这一切都是为你完成的。按照建议阅读JSSE参考资料,了解您需要担心的事项。

0

关于TLS/SSL的细节,用于客户端证书的认证,用“正常” hanshake相比,该服务器发送一个额外CertificateRequest TLS消息给客户端,这与其证书响应在后续Certificate TLS消息(以后,客户端会发送一个TLS消息,在该消息中用其私钥对其他消息进行签名,以便向服务器证明它确实在其发送的证书中具有公钥的私钥。)请注意,一旦握手已经完成,消息没有用你的私钥加密,但是与服务器共享临时密钥(保密地同意这些密钥也是握手的一部分)。

实际上,您需要包含在PKCS#12文件(例如)中的证书及其私钥,并配置客户端在连接到服务器时发送它(服务器将根据其要求组态)。 假设您只需要一个证书并且不必在多个证书之间做出选择就更容易了,否则,您需要在SSLContext内设置自己的X509TrustManager

如果您的所有连接都可能使用此证书,则可以使用默认设置,其中HttpsURLConnection(以及默认的SSLSocketFactory)将会选取。 这可以这样做:

  • 您的设置在命令行上设置javax.net.ssl.keyStorejavax.net.ssl.keyStoreTypejavax.net.ssl.keyStorePassword系统性能。我会建议是因为有人在机器上的其他人可能会看到命令行和上市的过程(根据机器的配置)的设置,
  • 你的应用程序中设置的系统属性,
  • 初始化SSLContext并通过SSLContext.setDefault(..)(Java 6)将其设置为默认值。

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

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

(您可以使用类似jSSLutils的工具来帮助构建SSLContext。)