Tag: ssl

默认SSL上下文init失败:null

创建SSL服务器时,出现此exception: Default SSL context init failed: null 。 它似乎来自它无法找到密钥库和信任库的事实。 我尝试从jar文件中设置它们。 该文件存在于jar中,但似乎无法找到该资源。 String keystore = TestFramework.class.getResource(“/security/keystore.jks”).getFile(); System.setProperty(“javax.net.ssl.keyStore”, keystore); System.setProperty(“javax.net.ssl.keyStorePassword”, password); String truststore = TestFramework.class.getResource(“/security/truststore”).getFile(); System.setProperty(“javax.net.ssl.trustStore”, truststore); System.setProperty(“javax.net.ssl.trustStorePassword”, “ebxmlrr”); 我运行了一个ls命令来检查文件是否存在。 它存在。 然后我通过运行命令jar -tf myjar.jar | grep security检查keystore.jks是否存在 jar -tf myjar.jar | grep security并且它存在。 security/ security/keystore.jks security/truststore 我的应用程序在Tomcat下运行。

用Java实现3270协议

我遇到了IBM HACL访问服务器的大问题,该服务器使用3270协议。 库不断崩溃,我们的JNI包装器实际上是一个错误修复层,用于实现不佳且文档记录不佳的库(我怀疑我们也引入了新的错误)。 而且,在我们公司,每个人都了解Java,如果没有JNI-Layer和IBM类库,可以维护软件。 我们必须使用C ++类库,因为IBM Java库是不可用的:我们会翻译每个不可打印的字符,并且我们会丢失所有控制字符。 现在的问题是:我们可以放弃这个库并完全用Java实现我们的解决方案(我们想避免使用其他供应商的另一个库)吗? 协议是否有详细记录? 3270-over-ssl的实现真的如此复杂吗? 谢谢。

忽略Java中的SSLvalidation

我必须使用无效的SSL证书调用托管在Web服务器上的HTTP服务。 在开发中,我使用keytool导入证书,但每个客户端安装的证书都不同,所以我不能捆绑它。 前言:我知道跳过SSLvalidation真的很难看。 在这种特定情况下,我甚至不需要SSL,系统中的所有其他通信都是简单的HTTP。 所以我真的不关心MITM攻击等。 攻击者无需破解SSL,因为数据没有SSL。 这是对我无法控制的遗留系统的支持。 我正在使用带有NaiveTrustManager和NaiveHostnameVerifier的SSLSocketFactory HttpURLConnection 。 这适用于我尝试过的一些自签名服务器,但不适用于客户的网站。 我得到的错误是: javax.net.ssl.SSLKeyException: [Security:090477]Certificate chain received from xxxxxxxxxx was not trusted causing SSL handshake failure. at com.certicom.tls.interfaceimpl.TLSConnectionImpl.fireException(Unknown Source) at com.certicom.tls.interfaceimpl.TLSConnectionImpl.fireAlertSent(Unknown Source) at com.certicom.tls.record.handshake.HandshakeHandler.fireAlert(Unknown Source) at com.certicom.tls.record.handshake.HandshakeHandler.fireAlert(Unknown Source) at com.certicom.tls.record.handshake.ClientStateReceivedServerHello.handle(Unknown Source) at com.certicom.tls.record.handshake.HandshakeHandler.handleHandshakeMessage(Unknown Source) at com.certicom.tls.record.handshake.HandshakeHandler.handleHandshakeMessages(Unknown Source) at com.certicom.tls.record.MessageInterpreter.interpretContent(Unknown Source) at com.certicom.tls.record.MessageInterpreter.decryptMessage(Unknown Source) at com.certicom.tls.record.ReadHandler.processRecord(Unknown Source) […]

我可以在端口443上安全地运行Tomcat,在8080上安全地运行Tomcat

让我解释一下我的情况。 目前,我在Tomcat 6上运行了很多应用程序,默认端口为8080。 我刚刚创建了一些需要登录的应用程序。我将购买一个SSL证书来安装在这台服务器上。 我不喜欢使用端口8443的想法,因为它使URL更复杂。 如果我在端口80上运行Tomcat,我必须更改几十个链接,我必须以root身份运行Tomcat(而不是tomcat)。 在端口8080上运行不安全的应用程序但是在端口443上运行安全运行是否有任何问题? 我想我的设置会有如下所示的url: http://mydomain.com:8080/report/controller?id=weather https://mydomain.com/secure/controller?id=profile 这可能吗?

JDK / JRE源代码与匹配的JSSE(SSL)源代码和匹配的可运行JDK / JRE?

我在哪里可以找到Java 6 JSSE / JCE源代码? 并问自己如何获得匹配源的JRE / JDK? 但我不知道其中任何一个都没有具体到足以得到我真正追求的答案,所以我将尝试更具体的问题版本。 基本上我想解决的问题是我希望能够在Windows上使用我的Eclipse调试器并进入Java SSL类(JSSE)来帮助我调试SSL问题以及更好地理解SSL过程。 BTW我熟悉(并使用)javax.net.debug = ssl | all系统属性来获取SSL跟踪,虽然这非常有用,但我仍然希望能够逐步完成那些讨厌的代码。 所以我认为我特别需要的是: 可执行的JRE / JDK实现(不想构建一个)… 这在我的Windows平台(XP)上运行…… 这包括来源…… 该源包括SSL“位”(JSSE等)…… 理想情况下,SSL实现是Sun或OpenJDK版本。 我认为最接近的事情(如PW的答案StackOverflow:87106中所述 )是在OpenJDK 6 Source Release中找到的OpenJDK源openjdk-6-src-b12-28_aug_2008.tar.gz,但我不确定是否有匹配的可执行JDK / JRE用于在Windows上运行。

JAVA – 使用SSL证书和HTTPS的简单GET请求

我有一个带有’.pfx’扩展名的文件和这个证书的密码。 我需要做的是向web服务发送一个简单的GET请求并阅读响应正文。 我需要实现一个类似于此的方法: String getHttpResponse(String url, String certificateFile, String passwordToCertificate){ … } 我还尝试使用openssl将证书转换为“无密码”格式: Convert a PKCS#12 file (.pfx .p12) containing a private key and certificates to PEM: openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes 所以我的方法的替代实现可能是: String getHttpResponse(String url, String certificateFile){ … } 我真的很感谢你的帮助,我花了半天的时间用谷歌搜索它,但是我还没有找到一个可以帮助我的例子,似乎我有一些关于SSL和东西的一些基本假设的问题。

SSL通信中的Apache CXFexception:SocketTimeOut

所以这是交易。 我有一个Web服务WSDL,我需要在公司网络之外进行SOAP调用。 Web服务是HTTPS SOAP,需要客户端证书。 我用wsdl2java用Java生成了客户端代码,事情看起来很顺利。 我现在不能做的是通过CXF从Web服务收到回复。 SSL握手似乎只是花花公子甚至达到了CXF尝试进行HTTP POST的程度,但是超时等待响应(如下所示): Allow unsafe renegotiation: false Allow legacy hello messages: true Is initial handshake: false Is secure renegotiation: false *** HelloRequest (empty) main, SEND TLSv1 ALERT: warning, description = no_renegotiation Padded plaintext before ENCRYPTION: len = 24 0000: 01 64 01 FD 5B 38 03 A6 70 41 57 […]

如何将多个信任库路径添加到“java.net.ssl.trustStore”?

我希望我的Java代码在一个密钥库中搜索服务器的CA证书…如果它无法找到特定的证书(我认为只有当我尝试通过LDAP连接到Directory Server时才会知道),它应该是在另一个密钥库中查找证书,我知道它的路径。 我试过这个: System.setProperty(“javax.net.ssl.trustStore”, System.getProperty(“java.home”) + “/lib/security/cacerts” + System.getProperty(“path.separator”) + path/to/second/keystore); 但它似乎没有用。 只添加一个路径(其中任何一个)都可以工作,即如果找到证书就会像魅力一样运行,否则就会失败。 所以我的问题是: 是否有方法将多堆密钥库路径添加到javax.net.ssl.trustStore? 如果不可能我应该如何编写我的代码(我要求算法),以便它在第一次搜索后不会抛出exception而失败? PS:我对Java不太熟悉。 以下是我的代码的相关部分: if(useSSL) { try { SSLContext se = SSLContext.getInstance(“TLS”); Security.addProvider(se.getProvider()); } catch(NoSuchAlgorithmException e) { } System.setProperty(“javax.net.ssl.trustStore”, System.getProperty(“java.home”) + “/lib/security/cacerts”); com.org.ldap.LDAPSocketFactory ssf = new LDAPJSSESecureSocketFactory(); LDAPConnection.setSocketFactory(ssf); } try { lc = new LDAPConnection(); lc.connect( ldapServer, ldapPort); lc.bind( ldapVersion, ldapUser, […]

添加trustStore以进行客户端身份validation

服务器和相应的客户端支持客户端身份validation,但如下所示: SSLHandshakeException:没有共同的密码套件 ,没有trustStore引用,即它们使用默认的trustStore。 如何指定trustStore? ClassFileServer: private static ServerSocketFactory getServerSocketFactory(String type) { if (type.equals(“TLS”)) { SSLServerSocketFactory ssf = null; Properties systemProps = System.getProperties(); systemProps.put( “javax.net.ssl.trustStore”, “cacerts.jks”); systemProps.put( “javax.net.ssl.trustStorePassword”, “p@ssw0rd”); System.setProperties(systemProps); try { // set up key manager to do server authentication SSLContext ctx; KeyManagerFactory kmf; KeyStore ks; char[] passphrase = “p@ssw0rd”.toCharArray(); ctx = SSLContext.getInstance(“TLS”); kmf = […]

你如何通过https启动java servlet?

我试图在eclipse上运行tomcat上的一个servlet。 当我在服务器上运行时,servlet运行并为我提供如下链接: “HTTP://本地主机:8443 / AuthServer /服务器” 我已经为SSL配置了我的Tomcat服务器,如下所示: 当我在服务器上运行servlet时,它仍然使用http。 我希望我的servlet链接为“https:// …”而不是“http:// ..”。 你是怎样做的?