Tag: ssl

SSL套接字php代码需要转换为Java

我有一个Pem文件,我使用这个PHP代码连接到c ++ SSL服务器,但现在我需要这个用Java编写的PHP代码 $ctx = stream_context_create(); stream_context_set_option($ctx, ‘ssl’, ‘local_cert’, ‘cert.pem’); stream_context_set_option($ctx, ‘ssl’, ‘passphrase’, $pass); $fp = stream_socket_client(‘ssl://serverURL’, $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx); if (!$fp) { print “Failed to connect $err $errstr\n”; return; } 有关如何在Java中读取cert.pem文件然后建立SSL套接字的任何想法? 谢谢!

使用JSSE时如何进行主机名validation?

我正在编写一个Java客户端(需要在桌面JRE和Android上工作),以获得通过TLS承载的专有协议(特定于我的公司)。 我正在尝试找出用Java编写TLS客户端的最佳方法,特别是确保它正确地进行主机名validation。 ( 编辑:通过它,我的意思是检查主机名是否与X.509证书匹配,以避免中间人攻击。) JSSE是编写TLS客户端的明显API,但我从“ 世界上最危险的代码 ”论文(以及实验)中注意到,JSSE在使用SSLSocketFactory API时不validation主机名。 (这是我必须使用的,因为我的协议不是HTTPS。) 因此,似乎在使用JSSE时,我必须自己进行主机名validation。 而且,不是从头开始编写代码(因为我几乎肯定会弄错),似乎我应该“借用”一些有效的现有代码。 所以,我发现的最有可能的候选者是使用Apache HttpComponents库(具有讽刺意味的是,因为我实际上并不在做HTTP) 并使用org.apache.http.conn.ssl.SSLSocketFactory类代替标准的javax .net.ssl.SSLSocketFactory类 。 我的问题是:这是一个合理的行动方案吗? 或者我完全误解了事情,走出了深层,实际上有一种更简单的方法来获取JSSE中的主机名validation,而不需要像HttpComponents那样引入第三方库? 我也查看了BouncyCastle,它有一个非JSSE API用于TLS,但它似乎更有限,因为它甚至没有进行证书链validation,更不用说主机名validation,所以它看起来像一个非-起动机。 编辑:这个问题已经回答了Java 7,但我仍然很好奇Java 6和Android的“最佳实践”是什么。 (特别是,我必须为我的应用程序支持Android。) 再次编辑:为了使我的“借用Apache HttpComponents”的提议更加具体,我创建了一个小型库 ,其中包含从Apache HttpComponents中提取的HostnameVerifier实现(最值得注意的是StrictHostnameVerifier和BrowserCompatHostnameVerifier)。 (我意识到我需要的只是validation器,我不需要像我原先想的那样使用Apache的SSLSocketFactory。)如果留给我自己的设备,这就是我将使用的解决方案。 但首先,我有什么理由不这样做吗? (假设我的目标是以与https相同的方式进行主机名validation。我意识到它本身可以辩论,并且已经在加密列表的线程中进行了讨论,但是现在我坚持使用类似HTTPS的主机名validation,即使我没有使用HTTPS。) 假设我的解决方案没有“错误”,我的问题是:是否有一种“更好”的方式来实现它,同时仍然可以在Java 6,Java 7和Android中保持可移植性? (“更好”意味着更惯用,已经广泛使用,和/或需要更少的外部代码。)

与Tomcat 7的相互身份validation

我正在尝试设置在Tomcat 7中运行的Java Web服务以使用相互(双向)身份validation。 似乎无论我做什么,连接到安全端口上的服务都无法正常工作。 这是我创建证书和密钥库等所做的: //create the key and certificate for the tomcat server. keytool -genkey -v -alias tomcat -keyalg RSA -validity 3650 -keystore tomcat.keystore //create the key and certificate for the client machine. keytool -genkey -v -alias clientkey -keyalg RSA -storetype PKCS12 -keystore client.p12 //export the client key keytool -export -alias clientkey -keystore client.p12 […]

如何使用https / ssl与Maven / Mortbay Jetty插件?

我想使用ssl / https,如中所述 http://docs.codehaus.org/display/JETTY/How+to+configure+SSL 使用jetty-maven-plugin,但我不知道如何配置插件。 任何提示,示例,教程,演练? 另外,我想知道如何执行上述教程的步骤3b,其中需要对jetty服务器进行操作( java -classpath $JETTY_HOME/lib/jetty-util-6.1-SNAPSHOT.jar:$JETTY_HOME/lib/jetty-6.1-SNAPSHOT.jar org.mortbay.jetty.security.PKCS12Import jetty.pkcs12 keystore )。

JSSE包创建两个需要两次unwraps的tls包。 为什么?

我正在使用连接的openssl客户端检查jsse tls加密和解密的java应用程序的行为。 首先,我观察到当我为客户端数据调用unwrap时,它总是解包消耗37个字节并产生0.下一个unwrap消耗一些字节并产生一些。 起初我以为客户端会首先包装一个空数组。 但后来我发现jsse代码做的相同,只不过它产生1个字节而不是0。 因此,对wrap每次调用都会消耗X个字节并产生Y个字节,但需要两个unwrap而第一个消耗37个字节并产生1个字节,第二个消耗Y-37字节并产生X-1个字节。 虽然openssl和jsse几乎一样,但我希望这是正确的。 但是我想知道,为什么会这样。 我没有看到这个原因,需要额外的资源……?

Okhttp android Websocket和Jetty Server连接SSL

我有下面给出的okhttpclient android websocket和jetty独立服务器。 我必须为android客户端和jetty服务器之间的通信启用强大的安全性。 我在客户端面临问题,如下所示。 服务器端 package com.wss.okhttp; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.security.KeyStore; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.security.cert.Certificate; import java.security.cert.CertificateException; import java.security.cert.CertificateFactory; import javax.servlet.ServletException; import javax.websocket.DeploymentException; import javax.websocket.server.ServerContainer; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.ServerConnector; import org.eclipse.jetty.server.SslConnectionFactory; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.util.ssl.SslContextFactory; import org.eclipse.jetty.websocket.jsr356.server.deploy.WebSocketServerContainerInitializer; public class JettySSLServer { public static void main(String[] args) throws IOException […]

警告:找不到合适的证书 – 继续没有客户端身份validation

团队在尝试使用HTTPS完成相互握手时遇到以下问题 main, READ: TLSv1.2 Handshake, length = 30 *** CertificateRequest Cert Types: RSA, DSS, ECDSA Supported Signature Algorithms: SHA1withRSA, SHA1withDSA, SHA1withECDSA, SHA256withRSA, Unknown (hash:0x4, signature:0x2), SHA256withECDSA, SHA384withRSA, Unknown (hash:0x5, signature:0x2), SHA384withECDSA Cert Authorities: main, READ: TLSv1.2 Handshake, length = 4 *** ServerHelloDone Warning: no suitable certificate found – continuing without client authentication *** Certificate chain […]

scala sbt和公司代理 – SunCertPathBuilderException

当我尝试使用SBT时,无法下载某些文件,并出现以下错误: 服务器访问错误:sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到所请求目标的有效证书路径url = https://repo1.maven.org/maven2/组织/阶-SBT / SBT / 1.0.0-M4 / SBT-1.0.0-M4.jar 我已经遵循了stackoverflow的一些建议,并使用java keytool导入了公司代理SSL证书,如下所述: Web服务代理中的SSL证书问题 它似乎不会影响SBT工具。 它是否在不同的密钥库中查找? 有任何想法吗? 如果我在浏览器上粘贴URL,则下载文件。 只运行我安装的SBT工具时出现此错误。 当我尝试在IntelliJ Idea上创建一个SBT项目并对其进行更新时,它会给我带来不同URL的相同错误。 尝试使用lightbend激活器时也是如此。 谢谢。

SSL握手exception:“算法约束检查失败:MD5withRSA”

我尝试安装Oracle Entitlements Server Client。 我打电话的时候 config.cmd -smConfigId Sample-SM -prpFileName C:\oracle\product\11.1.2\as_1\oessm\SMConfigTool\smconfig.java.controlled.prp 我有这个例外: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: Algorithm constraints check failed: MD5withRSA at sun.security.ssl.Alerts.getSSLException(Alerts.java:192) at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1884) at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:276) at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:270) at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1341) at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:153) 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.writeRecord(SSLSocketImpl.java:702) at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:122) at java.io.OutputStream.write(OutputStream.java:75) at oracle.security.oes.enroll.EnrollmentClient.writeToSocket(EnrollmentClient.java:330) at oracle.security.oes.enroll.EnrollmentClient.enroll(EnrollmentClient.java:161) at oracle.security.oes.enroll.EnrollmentClient.main(EnrollmentClient.java:478) […]

Android Google Play旧OpenSSL警告

我刚刚发现安全警报说“您的应用程序正在使用包含安全漏洞的OpenSSL版本。”并链接到本文: https://support.google.com/faqs/answer/6376725 我做了一个grep命令来查找apk中使用的OpenSSL版本 unzip -p YourApp.apk | strings | grep “OpenSSL” 我发现该应用程序使用的是OpenSSL 1.0.1k 8 Jan 2015 问题是,我没有明确使用任何OpenSSL类,我没有依赖它。 所以可能其他一些依赖项是使用旧的OpenSSL版本,但我不知道,我怎么能找到使用OpenSSL依赖的库。 我试图找到哪个库使用OpenSSL与此命令./../gradlew -q dependencies但根本没有任何OpenSSL ..