Tag: ssl

OCSP检入Java安全套接字

如果我设置Security.setProperty(“ocsp.enable”, “true”) , SSLSocket或SSLServerSocket连接是否会使用OCSP自动检查证书吊销? 创建套接字时是否必须手动执行OCSP检查? (我没有使用CRL。)

Java ssl握手失败(SSLPoke)

我已将证书导入到信任库,但仍无法成功连接到此URL。 我已经尝试了所有方法,任何人都可以看到输出并帮助解决发生的事情吗? java -Djavax.net.debug=all SSLPoke services.americanexpress.com 443 keyStore is : keyStore type is : jks keyStore provider is : init keystore init keymanager of type SunX509 trustStore is: /usr/java/jdk1.8.0_60/jre/lib/security/cacerts trustStore type is : jks trustStore provider is : init truststore adding as trusted cert: …… adding as trusted cert: Subject: CN=services.americanexpress.com, OU=Web Hosting, O=American Express […]

在java中打开自签名HTTPS SSL URL的直接方法?

我正在构建一个需要在java中打开自签名HTTPS SSL URL的应用程序。 我已经了解到,您可以通过添加对HttpsURLConnection.setDefaultHostnameVerifier()的调用来绕过SSL问题,您可以在其中说明允许的主机名。 但是,我的第二个问题是我的服务器运行自签名证书。 因此,即使主机名绕过,我也会遇到以下exception: javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到所请求目标的有效证书路径 我环顾四周,我发现的唯一解决方案是将证书添加到java密钥库,但这对我来说是一个问题,因为我无法控制他们何时或如何更新java,我已经读过更新之间不保留密钥库,并且我无权访问JVM之外的系统。 我的应用程序只会调用单个服务器,所以如果有办法绕过自签名限制,并且从不咨询密钥库,那么这不是一个安全问题,但有没有办法做到这一点?

SSLEngine unwrap()javax.crypto.BadPaddingException:坏记录MAC

这让我疯狂了好几天了。 我使用带有ssl加密的java nio创建了一个使用SSLEngine的客户端。 握手工作正常,我写了一个网站的GET请求,它工作正常(我得到200代码的标题)。 问题是当网站发回数据包时,在第二个数据包上我得到一个BadPaddingException。 这是我的阅读方法: public void read(SelectionKey key,ByteBuffer readBuffer) throws IOException, BadPaddingException { SocketChannel socketChannel = (SocketChannel) key.channel(); ByteBuffer clientSSLData = ByteBuffer.allocate(getPacketBufferSize()); System.out.println(“Reading data. PacketBufferSize: “+(getPacketBufferSize())); int length = socketChannel.read(clientSSLData); System.out.println(“read “+length+” bytes”); if (length == -1){ System.out.println(“Length is -1 which means nothing was read from the channel “); socketChannel.close(); return; } clientSSLData.flip(); […]

如何在javax.ws.rs.client中为客户端使用连接池

我正在尝试使用https服务与服务器通信 我能够沟通,但需要2秒的响应时间.. 现在,我希望减少每次请求的SSL握手时间 所以,我想缓存或保持连接直播或创建池连接.. 有什么建议.. 我的代码: static SslConfigurator sslConfig = SslConfigurator .newInstance() .securityProtocol(“TLS”) .keyStoreFile(“/path”) .keyStorePassword(“password”) .keyStoreType(“JKS”) .trustStoreFile( “/path”); static SSLContext sslCtx = sslConfig.createSSLContext(); static Client client = ClientBuilder.newBuilder().sslContext(sslCtx).build(); Response response = client.target(target).path(path).request(MediaType.APPLICATION_JSON) .post(Entity.entity(jsonRequest.toString(), MediaType.APPLICATION_JSON));

Java applet无法在Java8 / HTTPS上加载

我hava Java applet在使用HTTPS时不会运行。 在localhost上测试时一切正常。 此外,一切都在使用仅使用HTTP的测试服务器。 在服务器仅使用HTTPS的生产模式中,此问题会引发。 引起我注意的一件事是:“ http://www.example.com:443/ with proxy = DIRECT”为什么连接尝试建立到http而不是https? http +端口443似乎不太正确…任何人都知道我怎么可能修改它? 如果有人能指出我正确的方向与我的问题,将很高兴。 控制台输出: Java Plug-in 11.25.2.18 Using JRE version 1.8.0_25-b18 Java HotSpot(TM) Client VM User home directory = D:\Users\example —————————————————- c: clear console window f: finalize objects on finalization queue g: garbage collect h: display this help message l: dump classloader list […]

使用SSLEngine(JSSE)与旧客户端进行SSL握手

这是“ 使用自签名证书和SSLEngine(JSSE)进行SSL握手 ”的后续问题。 我已经实现了一个NIO Web服务器,可以在同一个端口上处理SSL和非SSL消息。 为了区分SSL和非SSL消息,我检查入站请求的第一个字节以查看它是否是SSL / TLS消息。 例: byte a = read(buf); if (totalBytesRead==1 && (a>19 && a<25)){ parseTLS(buf); } 在parseTLS()方法中,我实例化SSLEngine,启动握手,包装/解包消息等。对于大多数现代Web浏览器(Firefox 10,IE 9,Safari 5等),一切似乎都能正常工作。 问题是像IE 6这样的老式Web浏览器和Java的URLConnection类之类的库似乎以不同的方式启动SSL / TLS握手。 例如,IE 6的前几个字节看起来像这样(hex值): 80 4F 01 03 00 … 如果我将消息传递给SSLEngine,它似乎无法识别该消息并抛出exception。 javax.net.ssl.SSLException: Unsupported record version Unknown-0.0 那么IE 6和Java的URLConnection类究竟发送了什么呢? 这是JSSE SSLEngine可以支持的有效SSL / TLS消息吗? 我是否必须进行一些预处理或与客户协商以发送不同的消息? 提前致谢! UPDATE 感谢Bruno和EJP以及一些进一步的调试,我对正在发生的事情有了更好的理解。 正如Bruno正确指出的那样,IE6和Java 6客户端通过SSLv2 […]

使用truststore的java ssl连接

我有一个连接到https站点的Web应用程序。 为此,我必须在lib / security文件夹中的cacerts中安装证书。 我想创建一个信任库并将其放在应用程序中,并在连接到其他站点时使应用程序引用此信任库,以便在移动应用程序时,证书随之移动。 我连接到https网站的方式是使用表单post。 我该怎么做呢 此外,在执行表单发布而不是使用HttpsURLConnection时,如何配置以查看自定义信任库而不是cacerts。

Java SSLSocket:如何发送完整的服务器证书链?

当我在Java 7中创建SSLServerSocket时,服务器正确使用我的服务器证书和密钥。 该证书是由ca的子ca发行的。 因此,从根证书到服务器证书的完整链具有四个证书。 完整链存在于密钥库/信任库中。 但是,当客户端连接服务器时,始终只发送服务器证书本身。 这也适用于基于Java的Web服务器,如Jetty。 因为大多数客户端只安装了根ca证书而不是两个sub-ca证书,所以这是一个大问题。 如何强制Java在SSL / TLS握手中发送完整的证书链?

将JavaMail与自签名证书一起使用

我有一个包含以下代码的servlet: System.setProperty(“javax.net.ssl.keyStore”, getServletContext().getRealPath(“keystore.jks”)); System.setProperty(“javax.net.ssl.keyStorePassword”, “123456”); System.setProperty(“javax.net.ssl.trustStore”,getServletContext().getRealPath(“keystore.jks”)); System.setProperty(“javax.net.ssl.trustStorePassword”,”123456″); SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault(); SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket(“127.0.0.1”, 606); 使用此代码,我可以使用SSL(我的情况是强制性的)。 稍后在同一个servlet中我需要使用JavaMail发送电子邮件。 当我尝试在不使用其他代码中的证书的情况下发送此电子邮件时,它工作正常,但当我尝试使用它时,返回以下消息:使用端口465 – > DEBUG: setDebug: JavaMail version 1.4.7 DEBUG: setDebug: JavaMail version 1.4.7 DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle] DEBUG SMTP: useEhlo true, useAuth true DEBUG SMTP: useEhlo true, useAuth true DEBUG SMTP: trying to connect to […]