简单的服务器 listen = getServer(); Logger.getAnonymousLogger().info(“Listening to “+listen.toString()); SSLSocket client = (SSLSocket)listen.accept(); // adding this line fixes everything – client.write(42); client.close(); 和一个简单的客户 SocketFactory sockMaker = SSLSocketFactory.getDefault(); Socket server = sockMaker.createSocket(“localhost”, 1443); int retval = server.getInputStream().read(); assert retval == -1; server.close(); 如果我没有向SSL Socket写入任何内容,则会在客户端抛出exception: Exception in thread “main” javax.net.ssl.SSLException:\ Received close_notify during handshake at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:190) 我不明白为什么会这样。 SSL / […]
我正在构建一个充当XMPP客户端的小程序,我正在使用Smack库。 现在,我连接的服务器需要SSL(在Pidgin中我必须检查“强制旧(端口5223)SSL”)。 我无法让Smack连接到这台服务器。 可能吗?
我们正在使用Maven 2并使用SSL客户端身份validation保护maven存储库管理器。 为了让Maven访问存储库,必须将以下系统属性传递给Java: javax.net.ssl.trustStore中= trust.jks javax.net.ssl.trustStorePassword = javax.net.ssl.keyStore = keystore.p12 javax.net.ssl.keyStoreType = PKCS12 javax.net.ssl.keyStorePassword = 有关详细信息,请参阅此迷你指南 。 为了在Maven中设置这些系统属性,我必须使用MAVEN_OPTS环境变量(或直接在命令行上传递它们)。 无论哪种方式,当Maven实际执行时,所有这些属性都可以被系统上的其他用户看到(通过ps),包括我的密钥库密码。 有没有办法设置这些属性,以便密码不会在命令行上公开?
我在尝试使用HttpClient来调用使用自签名证书的https站点时感到有点困惑。 我有下面的代码,这使我能够进行调用,但后来我收到错误,如javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: No trusted certificate found我已经从我下载了证书网页浏览器,并了解我可以将其导入密钥库,但我宁愿把它放入代码并以这种方式使用它,有没有办法做到这一点? HttpClient client = new HttpClient(); EasySSLProtocolSocketFactory easySSLProtocolSocketFactory = new EasySSLProtocolSocketFactory(); Protocol https = new Protocol(“https”, easySSLProtocolSocketFactory, 443); Protocol.registerProtocol(“https”, https); BufferedReader br = null; String responseString = “”; GetMethod method = new GetMethod(path); int returnCode = client.executeMethod(method);
我正在开发Android应用程序,我需要访问HTTPS地址。 我正在使用Volley来请求我的数据,但现在我收到此错误com.android.volley.NoConnectionError: java.io.IOException: Hostname ‘ ‘ was not verified 为了获得SSL工厂,我做了这个: private static SSLSocketFactory getSocketFactory() { SSLSocketFactory socketFactory = null; try { final CertificateFactory certificateFactory = CertificateFactory.getInstance(“X.509”); final BufferedInputStream bis = new BufferedInputStream(sContext.getResources().openRawResource(R.raw.cert)) ; Certificate certificate; try { certificate = certificateFactory.generateCertificate(bis); } finally { bis.close(); } final String keyStoreType = KeyStore.getDefaultType(); final KeyStore keyStore = KeyStore.getInstance(keyStoreType); […]
我正在使用Apache CXF客户端,在Windows Java 1.6.0_29-b11 VM中运行以连接到IBM大型机(我相信它是zSeries),并调用在那里运行的SOAP Web服务。 连接是通过SSL / TLS完成的,大部分时间都可以正常工作。 但是,我有时会使用bad record MAC消息进行SSLexception。 以下是使用javax.net.debug属性的程序输出。 2011-11-16 12:32:37,731 INFO LoggingOutInterceptor: Outbound Message ————————— ID: 29 Address: https://1.2.3.4/access/servlet/blabla.atk123 Encoding: UTF-8 Content-Type: text/xml Headers: {Accept=[*/*], SOAPAction=[“Blablaaction/ATK123.Execute”]} Payload: WA543219999 ————————————– pool-1-thread-1, setSoTimeout(30000) called pool-1-thread-1, WRITE: TLSv1 Application Data, length = 321 pool-1-thread-1, WRITE: TLSv1 Application Data, length = 262 pool-1-thread-1, READ: […]
我试图在Play框架中调用Web服务(具有自签名SSL证书)使用以下函数: public static play.libs.F.Promise webcall() { String feedUrl = “https://10.0.1.1/client/api”; final play.libs.F.Promise resultPromise = WS.url(feedUrl).get().map( new Function() { public Result apply(WS.Response response) { return ok(“Feed title:” + response.asJson().findPath(“title”).toString()); } } ); return resultPromise; } 它在日志中抛出以下错误, [error] play – Cannot invoke the action, eventually got an error: java.net.ConnectException: General SSLEngine problem to https://10.0.1.1/client/api [error] application – […]
我坚持创建一个SSLContext(我想用它来实例化一个SSLEngine来处理通过java-nio的加密传输): 代码 String protocol = “TLSv1.2”; Provider provider = new BouncyCastleProvider(); Security.addProvider(provider); sslContext = SSLContext.getInstance(protocol,provider.getName()); 抛出以下exception: Exception in thread “main” java.lang.RuntimeException: java.security.NoSuchAlgorithmException: no such algorithm: SSL for provider BC at org.bitmash.network.tcp.ssl.SslTransferFactory.(SslTransferFactory.java:43) at org.bitmash.network.http.HttpsServer.(HttpsServer.java:19) 我将Bouncy Castle的当前提供程序包’bcprov-jdk15on-150.jar’(我从这里获得 )附加到应用程序类路径以及它的bootclasspath(通过VM-Option -Xbootclasspath / p),但都没有解决问题。 我也尝试了不同的protocol值(即’SSL’和’TLSv1’)而没有任何影响。 此外,我发现这里和这里有类似问题的人。 但与他们相比,我的目标是(并且我正在使用)Java 7(或更高版本),但我仍然有这个问题。 是这样的 – 一般 – 甚至可以这样使用Bouncy Castle,或者我是否必须使用各自的API而不是oracle的NIO通过SSLEngine重写我的协议(这是我现在正在做的方式)? 非常感谢你们的帮助。
可能重复: 使用Java生成证书,公钥和私钥 我需要在运行时生成自签名证书,签名并导入Java密钥库。 我可以通过命令行中的“keytool”和“openssl”以下列方式执行此操作: keytool -import -alias root -keystore keystore.txt -file cacert.pem keytool -genkey -keyalg RSA -keysize 1024 -alias www.cia.gov -keystore keystore.txt keytool -keystore keystore.txt -certreq -alias www.cia.gov -file req.pem openssl x509 -req -days 3650 -in req.pem -CA cacert.pem -CAkey cakey.pem -CAcreateserial -out reqsigned.pem keytool -import -alias www.cia.gov -keystore keystore.txt -trustcacerts -file reqsigned.pem 当然,我可以使用keytool和openssl二进制文件发送我的应用程序并从Java执行上述命令,但我正在寻找一种更清晰的方法,这将允许我使用纯Java完成上述所有操作。 我可以使用的任何库?
我正在尝试从通过Internet通信的Java客户端/服务器应用程序保护连接。 我的想法是使用带有自签名证书和客户端身份validation的SSL套接字。 我做了以下事情: 服务器:包含新自签名证书的密钥库。 keytool -genkey -kelalg RSA … 客户端:包含新自签名证书的密钥库。 keytool -genkey -kelalg RSA … 服务器:包含导出的客户端证书的Truststore(来自上面的项目符号)。 keytool -export导出客户端证书和keytool -import -v -trustcacerts将其导入服务器的信任库 客户端:包含导出的服务器证书的Truststore(来自第一个项目符号点)。 keytool -export导出服务器证书和keytool -import -v -trustcacerts将其导入客户端的信任库 信任和密钥库正确连接到服务器/客户端。 我可以看到正在加载的证书(SSL调试信息)。 但整件事情都行不通。 在SSL握手期间,我收到以下错误(SSL调试信息): main, WRITE: TLSv1 Handshake, length = 897 main, READ: TLSv1 Handshake, length = 141 *** Certificate chain *** main, SEND TLSv1 ALERT: fatal, description […]