Tag: ssl

kCFStreamPropertySocketSecurityLevel到kCFStreamSocketSecurityLevelNegotiatedSSL导致连接到Java的OSStatus errSSLXCertChainInvalid(-9807)

我有一个简单的Java服务器,它使用自签名证书来识别我用keytool创建的自己: System.setProperty(“javax.net.ssl.keyStore”, “../../pki/z-keystore.jks”); System.setProperty(“javax.net.ssl.keyStorePassword”, “ZZZZZZ”); System.setProperty(“javax.net.debug”, “all”); ServerSocketFactory serverSocketFactory = SSLServerSocketFactory .getDefault(); ServerSocket serverSocket = serverSocketFactory .createServerSocket(8443); System.out.println(“Waiting for connections on 8443”); final AtomicInteger nextSocketId = new AtomicInteger(); while (true) { final Socket socket = serverSocket.accept(); new Thread(new Runnable() { @Override public void run() { final int socketId = nextSocketId.getAndIncrement(); try { System.out.println(“Received connection from […]

Java Rest调用具有不同的用户证书

我有一组用户证书,我想使用相应的用户证书对用户进行身份validation。 我配置服务器以启用用户身份validation。 它从浏览器工作正常。 如果有多个用户证书,它会提示我选择需要使用的证书。 我的问题是,我怎么能用java做到这一点? 我正在使用RestTemplate与服务器进行通信。 如果是单用户证书,我可以将其添加到java密钥库并使用它。 如何使用特定的用户证书进行特定的rest呼叫?

HTTPSURLconnection和Apache(系统)DefaultHttpClient之间的证书链不同

我面临着一个奇怪的问题,即Apache HTTPS客户端。 我正在尝试连接到已启用基本身份validation的外部HTTPS网站(仅限SSL服务器身份validation)。 以下是我的测试和结论的摘要。 使用Chrome / Firefox / IE中的任何一个连接到网站 – >成功 使用javax.net.ssl.HttpsURLConnection – >成功 使用DefaultHttpClient或SystemDefaultHttpClient – >失败 我尝试通过启用“javax.net.debug”到“ssl”进行调试。 我注意到两个客户端都选择了相同的信任存储(默认的JDK信任存储)并使用相同的协议(TLSv1)。 然而,差异在这里 我注意到JDK返回了以下扩展名 扩展server_name,server_name:[host_name:websitehostname] 而Apache Web客户端调试日志中缺少上述扩展名。 另外,我看到的另一个区别是在证书链中 以下来自JDK native的回复 *证书链[0] = [[版本:V3主题:** CN = websitename ,OU =域控制validation – RapidSSL(R),OU =参见www.rapidssl.com/resources/cps(c)13,OU = GT17702541,SERIALNUMBER = Q2La1fpFlFdNy4kUCIehYlMvw6bq64Ch签名算法:SHA1withRSA,OID = 1.2.840.113549.1.1.5 而在apache客户端以下 chain [0] = [[版本:V3主题:EMAILADDRESS = root @ i4319, CN = […]

如何在轴上禁用SSLv2套接字协议

使用axis消耗Web服务时遇到问题。这是因为axis发送了SSLv2 ClientHello,而提供webservice的服务器不支持SSLv2协议。 要解决此问题,我必须禁用此协议。 在Java中禁用它的代码是: SocketFactory socketFactory = SSLSocketFactory.getDefault(); SSLSocket socket = (SSLSocket) socketFactory.createSocket(hostname, port); socket.setEnabledProtocols(new String[] {“SSLv3”, “TLSv1”}); 我指的是这些链接 。 现在,问题是当我使用axis来使用web服务时如何禁用此协议?

将.key和.pem文件导入jks文件并在Java / Spring中使用

我从服务团队获得了以下密钥/证书,通过SSL调用他们的API,我通过curl命令对其进行了validation。 1. QA.test.key 2. QA.test.pem CURL命令: curl –key QA.test.key –cert ./QA.test.pem -X POST –header “Content-Type: application/json” –header “Accept: application/json” -d ‘{“pan”:”1234567890123456″, “client”: ” Application Name “}’ https://test-qa.abc.com/tokenize 现在,要通过https在Java中调用API,我是否需要执行以下操作? 创建一个自签名的jks文件 将.key和.pem导入新的test.jks文件? 请执行下列操作 public class TestApp { final static String KEYSTORE_PASSWORD = “testing”; static { System.setProperty(“javax.net.ssl.trustStore”, “src/main/resources/test.jks”); System.setProperty(“javax.net.ssl.trustStorePassword”, KEYSTORE_PASSWORD); System.setProperty(“javax.net.ssl.keyStore”, “src/main/resources/test.jks”); System.setProperty(“javax.net.ssl.keyStorePassword”, KEYSTORE_PASSWORD); } public static void […]

Java RMI客户端网络连接拒绝故障排除

这从来没有工作过 – 我是第一次设置环境。 下面的多个更新 我的RMI服务器在“守护进程”类型的进程中运行,因为我希望它在系统启动时像服务一样运行(不使用xinitdfunction),所以我可以使用SSL,所以我可以给守护进程命令与通过单独机制进入注册表的内容有关。 (IOW,我没有使用像Runtime.getRuntime().exec(“rmiregistry 2020”); ) 我知道RMI服务器已启动并运行,因为它可以正常工作: telnet localhost 我的客户端代码将许多用于SSL的环境变量编码到命令行中以启动它 – 稍后,我将以编程方式进行,但是现在,它开始于: $ java -Djavax.net.ssl.trustStore=/var/RMIssl/truststore -Djavax.net.ssl.trustStorePassword= -Djava.rmi.server.hostname=localhost my.package.Test 起初我得到的是: java.rmi.ConnectException: Connection refused to host: localhost; nested excepti on is: java.net.ConnectException: Connection refused 这几乎没用,除了有错误。 所以,我仔细检查了各种方式,最后用刷新输入了一些跟踪语句,并将其添加到命令行: -Djavax.net.debug=all 这有点难以理解,但仍然很难弄清楚错误的位置,所以我将可疑行放入循环中,捕获exception,现在很清楚它是在注册表中查找特定对象的问题,虽然错误信息确实似乎有误导性。 这是我得到的: $ java -Djavax.net.debug=all -Djavax.net.ssl.trustStore=/var/RMIssl/truststore -Djavax.net.ssl.trustStorePassword= -Djava.rmi.server.hostname=localhost my.package.Test Setup the security manager. Find the registry. Lookup testClient. […]

响应在Java中通过HTTPS失败

我们在网站上运行抓取工具以使我们的信息保持最新。 像这样的一些网站允许使用浏览器进行标准导航,但是在使用标准Java库时它们不会发送响应。 这是我用来访问主页(索引)页面的代码, try { URL my_url = new URL(“https://www.capitallightingfixture.com”); URLConnection u = my_url.openConnection(); if ( u instanceof HttpURLConnection ) { HttpURLConnection http_u = (HttpURLConnection)u; System.out.println(http_u.getResponseCode()); } } catch (Exception e) { e.printStackTrace(); } 运行时,该程序将抛出以下错误 javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 根据我对错误的理解,当Java无法validation服务器提供的证书时,它们会被抛出。 但是,正如我上面提到的,谷歌浏览器导航到页面没有问题,它甚至可以validation证书(不会引发安全错误)。 有没有办法可以覆盖Java并允许它接收响应?

使用来自计算引擎和/或外部网络的SSL的Google Cloud SQL

我正在尝试使用SSL连接到Google Cloud SQL(mysql)实例。 我已经启用了两个IP地址和一个具有远程访问权限的用户来自这些IP地址。 我还从Google的开发者控制台生成了证书文件。 client-key.pem client-cert.pem server-ca.pem 从两个启用的IP地址中的每一个使用此命令,我成功建立了连接。 mysql –ssl-ca=server-ca.pem –ssl-cert=client-cert.pem –ssl-key=client-key.pem –host=xxx.xxx.xxx.xxx –user=username –password 由于mysql客户端正常工作,我知道我的防火墙设置,用户,证书等都已正确设置。 现在我想在可执行jar文件中与java建立类似的连接。 按照此处列出的步骤操作: http : //dev.mysql.com/doc/connector-j/en/connector-j-reference-using-ssl.html Step 1: keytool -import -alias mysqlServerCACert -file cacert.pem -keystore truststore 注意:我将server-ca.pem替换为说明中使用的cacert.pem Step 2: openssl x509 -outform DER -in client-cert.pem -out client.cert Step 3: keytool -import -file client.cert -keystore keystore -alias mysqlClientCertificate 这些步骤创建了我的密钥库和信任库文件。 我在生成这两个文件时为每个文件关联不同的密码。 […]

由于SSLException,无法连接到SQLServer

从昨天开始,我无法从JBoss EAP 6.2连接到本地开发机器上的MicroSoft SQLServer(v11.1.3000.0)。 SQLServer现在想要使用SSL进行连接。 我得到以下exception: Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. Error: “java.lang.RuntimeException: Could not generate DH keypair”. ClientConnectionId:da0dbbf4-33a0-45ac-9885-fa1e31c47c6e at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1667) at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1668) at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1323) at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:991) at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:827) at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1012) at org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.getLocalManagedConnection(LocalManagedConnectionFactory.java:260) … 28 more Caused by: javax.net.ssl.SSLException: […]

Mosquitto安全MQTT连接

我的问题是关于TLS / SSL MQTT连接。 我已经从这个网站安装了moaquitto broker。 http://www.eclipse.org/mosquitto/download/ 并使用java中的paho eclipse库进行简单的订阅/发布。 然后我在java中使用bouncycastle创建了X509证书。 但现在我陷入了关于这些证书的服务器配置。我需要在同一个代理上为不同的主题使用不同的证书。 我发现的是以下mosquitto-auth-plug。 https://github.com/jpmens/mosquitto-auth-plug 但是在mosquitto_auth_plugin中我们需要定义包含用户名和密码进行身份validation的后端数据库。 我们如何在这里保存证书? 正如我上面所说,我正在为客户端创建X509 rootCA服务器和X509证书。我对此感到困惑。 有没有其他/更好的方式来确认服务器有关这些证书? 是否可以使用HiveMQ,ActiveMQ或RabbitMQ等任何其他经纪人来实现此目的?