java–SSL套接字连接

java–SSL套接字连接,第1张

概述如何创建SSL套接字连接?我真的需要创建一个密钥库?这个密钥库应该与我的所有客户端应用程序共享?我用以下代码创建了一个服务器:SSLServerSocketFactorysslserversocketfactory=(SSLServerSocketFactory)SSLServerSocketFactory.getDefault();SSLServerS

如何创建SSL套接字连接?

我真的需要创建一个密钥库?这个密钥库应该与我的所有客户端应用程序共享?

我用以下代码创建了一个服务器:

SSLServerSocketFactory sslserversocketfactory = (SSLServerSocketFactory) SSLServerSocketFactory                    .getDefault();SSLServerSocket sslserversocket = (SSLServerSocket) sslserversocketfactory                    .createServerSocket(ServerPropertIEs.getInstance()                            .getVsspAuthenticationPort());

我在androID上用以下代码创建了一个客户端:

SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory                .getDefault();SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket(                host, authPort);sslsocket.startHandshake();BuffereDWriter writer = new BuffereDWriter(new OutputStreamWriter(                sslsocket.getoutputStream()));BufferedReader reader = new BufferedReader(new inputStreamReader(                sslsocket.getinputStream()));

但是当我尝试连接时,会抛出以下错误:

javax.net.ssl.SSLHandshakeException: no cipher suites in common    at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)    at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1886)    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:276)    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:266)    at sun.security.ssl.ServerHandshaker.chooseCipherSuite(ServerHandshaker.java:894)    at sun.security.ssl.ServerHandshaker.clIEntHello(ServerHandshaker.java:622)    at sun.security.ssl.ServerHandshaker.processMessage(ServerHandshaker.java:167)    at sun.security.ssl.Handshaker.processLoop(Handshaker.java:868)    at sun.security.ssl.Handshaker.process_record(Handshaker.java:804)    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1016)    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312)    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339)    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323)

解决方法:

您需要证书来建立ssl连接,您可以在密钥库中加载证书,也可以自己加载证书.我将展示一些keystore选项的示例.

您的代码需要运行一些参数:

java -Djavax.net.ssl.keyStore=keyStorefile -Djavax.net.ssl.keyStorePassword=keystorePassword Server

您还可以使用java代码加载密钥库,最简单的解决方案是设置系统属性:

System.setProperty("javax.net.ssl.keyStore", 'keystorefile');System.setProperty("javax.net.ssl.keyStorePassword", 'keystorePassword ');

您也可以使用不同的方式加载密钥库,它更复杂,但您可以执行更复杂的 *** 作:

KeyStore ks = KeyStore.getInstance("JKS");ks.load(new fileinputStream("keystorefile"), "keystorePassword".tochararray());KeyManagerFactory kmf = KeyManagerFactory.getInstance("X509");kmf.init(ks, "keystorePassword".tochararray());TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509"); tmf.init(ks);SSLContext sc = SSLContext.getInstance("TLS"); TrustManager[] trustManagers = tmf.getTrustManagers(); sc.init(kmf.getKeyManagers(), trustManagers, null); SSLServerSocketFactory ssf = sc.getServerSocketFactory(); SSLServerSocket s = (SSLServerSocket) ssf.createServerSocket(serverport);SSLSocket c = (SSLSocket) s.accept();

对于客户端,代码最后一行有一些变化,最后3行将被替换为:

SSLSocketFactory ssf = sc.getSocketFactory(); SSLSocket s = (SSLSocket) ssf.createSocket(serverip, serverport);s.startHandshake();

如果要为androID加载密钥库,则类型必须是“BKS”而不是“JKS”.您可以轻松找到用于创建密钥库的资源.

总结

以上是内存溢出为你收集整理的java – SSL套接字连接全部内容,希望文章能够帮你解决java – SSL套接字连接所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1101519.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存