Tag: ssl

如何使用apache.commons.net.ftps配置客户端身份validation?

我使用apache.commons.net -framework在java中实现了FTPS客户端(FTP over SSL / TLS)。 它被配置为在默认端口21上执行显式安全性。 ftpsClient = new FTPSClient(false); ftpsClient.setTrustManager(getConfiguration().getCertificatesManager()); ftpsClient.connect(getConfiguration().getHostName(), getConfiguration().getPort()); 只要我不在服务器上强制执行客户端身份validation,一切正常。 但我需要启用客户端身份validation,因此我在服务器上强制执行它并配置客户端系统属性: -Djavax.net.ssl.keyStore=”D:/…/ftps-client-auth.keystore” -Djavax.net.ssl.keyStorePassword=”*****” -Djavax.net.ssl.keyStoreType=JKS 我得到的就像没有设置系统属性一样: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174) at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:136) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1806) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:986) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1170) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1197) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1181) at org.apache.commons.net.ftp.FTPSClient.sslNegotiation(FTPSClient.java:265) at org.apache.commons.net.ftp.FTPSClient._connectAction_(FTPSClient.java:207) at org.apache.commons.net.SocketClient.connect(SocketClient.java:172) at org.apache.commons.net.SocketClient.connect(SocketClient.java:192) 服务器日志说: DEBUG: Client “”, “SSL_accept failed: error:140890C7:SSL routines:SSL3_GET_CLIENT_CERTIFICATE:peer […]

通过awselb使用ssl时neo4j java驱动程序问题

我正在使用neo4j社区版3.1.1和企业版3.0.1版,并通过awselb配置了ssl。 连接我使用neo4j java驱动程序版本1.0.0我配置ssl和连接通过awselb我有打开文件的问题,他们增长如此之快,他们的数量没有减少。 应用程序中的代码使用ssl GraphDatabase.driver(host, authToken, Config.build().withEncryptionLevel(Config.EncryptionLevel.REQUIRED).toConfig()); 我尝试升级neo4j驱动程序到版本1.1.1和1.1.2,但有另一个问题:当我定期查询neo4j一切都很好,我从数据库获取数据,但我定期有500错误,在应用程序日志中此exception 没有ssl我没有问题 org.neo4j.driver.v1.exceptions.ServiceUnavailableException: SSL Connection terminated while receiving data. This can happen due to network instabilities, or due to restarts of the database. at org.neo4j.driver.internal.security.TLSSocketChannel.channelRead(TLSSocketChannel.java:170) at org.neo4j.driver.internal.security.TLSSocketChannel.unwrap(TLSSocketChannel.java:229) at org.neo4j.driver.internal.security.TLSSocketChannel.read(TLSSocketChannel.java:419) at org.neo4j.driver.internal.net.BufferingChunkedInput.readNextPacket(BufferingChunkedInput.java:409) at org.neo4j.driver.internal.net.BufferingChunkedInput.readChunkSize(BufferingChunkedInput.java:345) at org.neo4j.driver.internal.net.BufferingChunkedInput.read(BufferingChunkedInput.java:247) at org.neo4j.driver.internal.net.BufferingChunkedInput.fillScratchBuffer(BufferingChunkedInput.java:216) at org.neo4j.driver.internal.net.BufferingChunkedInput.readByte(BufferingChunkedInput.java:110) at org.neo4j.driver.internal.packstream.PackStream$Unpacker.unpackStructHeader(PackStream.java:430) at org.neo4j.driver.internal.messaging.PackStreamMessageFormatV1$Reader.read(PackStreamMessageFormatV1.java:398) at org.neo4j.driver.internal.net.SocketClient.receiveOne(SocketClient.java:176) at org.neo4j.driver.internal.net.SocketConnection.receiveOne(SocketConnection.java:214) at […]

无法发送邮件 – javax.net.ssl.SSLException:无法识别的SSL消息,明文连接?

我们使用Spring JavaMailSenderImpl发送Mail。 以下是配置 ${mail.transport.protocol} ${mail.smtp.auth} ${mail.smtp.starttls.enable} false true 属性文件: – host=XXXX.XXXX.XX port=25 mail.username=xxxxxxxx mail.password=xxxxxxx mail.transport.protocol=smtp mail.smtp.auth=true mail.smtp.starttls.enable=true 控制台日志 Exception in thread “taskExecutor-2” org.springframework.mail.MailSendException: Mail server connection failed; nested exception is javax.mail.MessagingException: Could not connect to SMTP host: XXXX.XXXX.XX, port: 25; nested exception is: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?. Failed messages: javax.mail.MessagingException: Could not connect […]

SSLv2Hello – javax.net.ssl.SSLException:收到致命警报:unexpected_message

我试图在基于Java 6(更新31)的客户端上调用在JDK7 / WildFly 8.2上运行的受SSL保护的Web服务。 我在客户端遇到的第一个问题是: javax.net.ssl.SSLException:收到致命警报:unexpected_message 通过将javax.net.debug设置为双方的all ,我在服务器端得到以下提示: javax.net.ssl.SSLHandshakeException:已禁用SSLv2Hello 快速研究表明 , 默认情况下,客户端上禁用SSLv2Hello:在Java SE 7中,SSLv2Hello将从客户端上的默认启用协议列表中删除。 所以我试图在standalone.xml SSLv2Hello上启用SSLv2Hello : 而服务器上的结果是: javax.net.ssl.SSLHandshakeException:没有合适的协议(协议被禁用或密码套件不合适) 所以我意识到,我应该尝试在客户端强制使用TLS,而不是在服务器上启用SSLv2Hello 。 我试图设置System.setProperty(“https.protocols”, “TLSv1”); 在我的Web服务调用之前没有任何效果。 我应该配置什么以及如何使握手工作? 我从服务器上的默认SSLSocketFactory打印了受支持的密码套件: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDH_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, TLS_ECDHE_RSA_WITH_RC4_128_SHA, SSL_RSA_WITH_RC4_128_SHA, TLS_ECDH_ECDSA_WITH_RC4_128_SHA, TLS_ECDH_RSA_WITH_RC4_128_SHA, SSL_RSA_WITH_RC4_128_MD5, TLS_EMPTY_RENEGOTIATION_INFO_SCSV

某些站点上的Java 8 https连接失败

我无法访问某些https资源。 请帮助使https呼叫可靠。 我在这里测试的示例来自Firefox浏览器,以确保它们正常工作。 $ java -version openjdk version “1.8.0_121” OpenJDK Runtime Environment (build 1.8.0_121-8u121-b13-1~bpo8+1-b13) OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode) 我还检查了https连接工作的网站和其他失败的错误(此处的错误示例)似乎使用相同的连接加密: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,128位密钥,TLS 1.2 我需要从位于不同域和服务器上的少数Web服务收集数据。 其中一些设置为http,一些设置为https。 我没有收集任何安全信息,只需要获取网页内容。 所以我相信所有人: public class SSLSetupService { /* * Turn SSL certificate check off */ public void trustAll(){ // Create a trust manager that does not validate certificate chains […]

HttpClient SSLException

我尝试将https请求发送到Web服务,并且在几次成功尝试之后,我开始一致地得到此错误。 这个错误意味着什么,为什么它会在第一次发生时发生。 javax.net.ssl.SSLException: java.lang.RuntimeException: Could not generate DH keypair at sun.security.ssl.Alerts.getSSLException(Alerts.java:208) at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1884) at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1842) at sun.security.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1825) at sun.security.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1751) at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:127) at org.apache.http.impl.io.AbstractSessionOutputBuffer.flushBuffer(AbstractSessionOutputBuffer.java:131) at org.apache.http.impl.io.AbstractSessionOutputBuffer.flush(AbstractSessionOutputBuffer.java:138) at org.apache.http.impl.io.ContentLengthOutputStream.flush(ContentLengthOutputStream.java:102) at org.apache.http.entity.StringEntity.writeTo(StringEntity.java:94) at org.apache.http.entity.HttpEntityWrapper.writeTo(HttpEntityWrapper.java:96) at org.apache.http.impl.client.EntityEnclosingRequestWrapper$EntityWrapper.writeTo(EntityEnclosingRequestWrapper.java:108) at org.apache.http.impl.entity.EntitySerializer.serialize(EntitySerializer.java:120) at org.apache.http.impl.AbstractHttpClientConnection.sendRequestEntity(AbstractHttpClientConnection.java:263) at org.apache.http.impl.conn.AbstractClientConnAdapter.sendRequestEntity(AbstractClientConnAdapter.java:227) at org.apache.http.protocol.HttpRequestExecutor.doSendRequest(HttpRequestExecutor.java:255) at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:123) at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:622) at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:454) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:941) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:919) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:910) […]

无法从JAVA连接到Mongo SSL副本集

我正在尝试使用SSL加密设置MongoDB的最新版本,我能够从mongo shell连接,但是当我从Java客户端连接时出现错误。 作品 mongo admin –host mongo1.xxxx.com –ssl –sslPEMKeyFile mongoClient.pem –sslCAFile mongoCA.crt 不起作用 public static void main(String args[]){ System.setProperty(“javax.net.ssl.trustStore”,”/home/gasparms/truststore.ts”); System.setProperty(“javax.net.ssl.trustStorePassword”, “mypasswd”); System.setProperty(“javax.net.ssl.keyStore”, “/home/gasparms/truststore.ts”); System.setProperty(“javax.net.ssl.keyStorePassword”, “mypasswd”); System.setProperty(“javax.security.auth.useSubjectCredsOnly”,”false”); MongoClientOptions options = MongoClientOptions.builder().sslEnabled(true) .build(); MongoClient mongoClient = new MongoClient(“mongo1.xxxx.com”,options); System.out.println(mongoClient.getDatabaseNames()); } 我从Mongo那边得到这个错误: 2015-06-09T15:08:14.431ZI NETWORK [initandlisten]连接从192.168.33.1:38944#585接受(现已开通3个连接)2015-06-09T15:08:14.445ZE NETWORK [conn585]没有由同行提供的SSL证书; 连接被拒绝2015-06-09T15:08:14.445ZI NETWORK [conn585] end connection 192.168.33.1:38944(2个连接现已开通)2015-06-09T15:08:14.828ZI NETWORK [conn580] end connection 192.168.33.13:39240 […]

使用Java与MySQL服务器建立SSL连接

我正在尝试使用Java over SSL连接到MySQL服务器。 我收到以下exception: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Cannot connect to MySQL server on www.mysite.com:3306. Make sure that there is a MySQL server running on the machine/port you are trying to connect to and that the machine this software is running on is able to connect to this host/port (ie not firewalled). Also make sure that the server […]

将外部服务器的自签名证书添加到我的Tomcat的受信任证书中

我的Tomcat需要使用SSL(TLS)连接到另一个 Web服务器( https://foreign.example.com )。 foreign.example.com有一个自签名证书,我相信。 当然,我的Tomcat默认不会 – 所以我必须告诉它。 一种方法是: $JRE/bin/keytool -import -alias my -file ssl-cert-myselfsigned.cer -keystore $JRE/lib/security/cacerts 这有效 :我的Tomcat允许SSL连接。 但是,我不喜欢这样做 :它将证书导入我的Java安装的可信密钥。 我不想说:“我的机器上运行Java的每个应用程序都应该信任该证书”。 只有Tomcat(或运行Tomcat的用户)才应该信任它。 所以我尝试将它导入~/.keystore的tomcat-user的密钥库,并使用以下属性设置Tomcat的 : keystoreFile=”${user.home}/.keystore” keystorePass=”thePassphraseICreatedTheKeystoreWith” 但是,这根本不起作用(我相信,这仅适用于我的Tomcat的服务器证书,而不适用于外部服务器的服务器证书,对吧?) 我尝试使用truststoreFile / truststorePass属性,但它们也不起作用。 (这些属性记录在http://tomcat.apache.org/tomcat-6.0-doc/config/http.html ) 有没有办法用外部服务器的服务器证书设置Tomcat,或者可能向java添加一些命令行参数,这使得我的密钥库(和密钥库密码)可用于JVM实例?

使用JKS和/或PFX证书从C#客户端调用Java Web服务

我基本上需要确保我对此服务的请求。 我已经提供了一个JAR测试客户端和两个文件, trust.jks和Client.pfx ,但我不知道如何使用它们:我理解X509Certificate2类以某种方式涉及。 执行测试客户端的命令行如下: java -Djavax.net.ssl.trustStore=trust.jks -Djavax.net.ssl.trustStorePassword=******** -Djavax.net.ssl.trustStoreType=JKS -Djavax.net.ssl.keyStore=Client.pfx -Djavax.net.ssl.keyStoreType=pkcs12 -Djavax.net.ssl.keyStorePassword=******** -jar TestClient.jar https://myServiceurl 它工作正常,所以我都可以看到服务,并且应该正确配置服务本身。 我的C#客户端(它的目标是.NET 2.0)使用普通的Web引用来执行请求: wsReferenceClient service = new wsReferenceClient(); //certificate code here ? //maybe service.ClientCertificates.Add(); ? service.MyRequest(myParameters); 应正确设置服务器设置。 我摸索着使用X509Certificate2方法,但我不能提出一些有意义的东西,所以答案是“你尝试了什么?” 现在的问题是“我真的不知道首先要尝试什么”。 任何帮助将非常感激。