Tag: ssl

如何强制java服务器只接受tls 1.2并拒绝tls 1.0和tls 1.1连接

我有一个在java 7上运行的https Web服务。我需要进行更改,以便此服务只接受tls1.2连接并拒绝ssl3,tls1.0和tls1.1。 我添加了以下java参数,以便tls1.2具有最高优先级。 -Dhttps.protocols=TLSv1.2 但它也接受来自java客户端的tls1.0连接。 如果客户端也使用上面的java参数运行,则连接为tls1.2但如果客户端在没有此参数的情况下运行,则连接为tls1.0。 我在jdk / jre / lib / security文件夹中的java.security文件中做了一些游戏。 我目前有以下禁用的算法: jdk.certpath.disabledAlgorithms= MD2, MD4, MD5, SHA224, DSA, EC keySize < 256, RSA keySize < 2048, SHA1 keysize < 224 jdk.tls.disabledAlgorithms=DSA, DHE, EC keySize < 256, RSA keySize < 2048, SHA1 keysize < 224 我正在使用java 7,更新79.我不倾向于拦截每个连接并检查tls版本。 我的服务器证书是使用带有RSA算法的MD5生成的2048位。 如果禁用的算法列表使用RSA代替RSA keySize <2048,则会收到SSLHandShakeError,并显示错误消息:没有共同的密码套件。 我的测试程序从以下URL运行http服务器: http […]

Apache HTTPClient SSLPeerUnverifiedException

使用Apache HttpClient 4.2.1。 使用从基于表单的登录示例复制的代码 http://hc.apache.org/httpcomponents-client-ga/examples.html 访问受SSL保护的登录表单时出现exception: Getting library items from https://appserver.gtportalbase.com/agileBase/AppController.servlet?return=blank javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated Closing http connection at sun.security.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:397) at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128) at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:572) at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180) at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:294) at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:640) at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:479) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:784) 据我所知,证书很好(参见堆栈跟踪前的URL),没有过期 – 浏览器不会抱怨。 我已经尝试将证书导入我的密钥库了 如何使用Apache HttpClient处理无效的SSL证书? 没有变化。 我相信你可以创建一个自定义SSLContext来强制Java忽略错误,但我宁愿修复根本原因,因为我不想打开任何安全漏洞。 有任何想法吗?

通过HTTPS / SSL通过自己的Java客户端连接的问题

我正在尝试与trackobot.com建立连接以接收一些JSON数据。 服务器仅允许通过HTTPS / SSL进行连接。 这是代码: java.lang.System.setProperty(“https.protocols”, “TLSv1,TLSv1.1,TLSv1.2”); URL url = new URL(“https://trackobot.com/profile/history.json?username=USER&token=TOCKEN”); InputStream is = url.openStream(); JsonParser parser = Json.createParser(is); openSteam抛出javax.net.ssl.SSLHandshakeException:收到致命警报:handshake_failure 我阅读了几篇与类似问题相关的post,但这些建议都没有帮助。 相应的证书在我的信任库中。 当我尝试连接到例如google.com时,没有错误。 所以,问题似乎是在我试图连接的服务器的握手特定中。 我使用-Djavax.net.debug = ssl运行我的代码返回: keyStore is : keyStore type is : jks keyStore provider is : init keystore init keymanager of type SunX509 trustStore is: /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/security/cacerts trustStore type is : jks […]

是否可以将普通套接字更改为SSLSocket?

有一个普通的套接字服务器侦听端口12345 ; ServerSocket s = new ServerSocket(12345); 我想知道的是:有可能: 如果客户端发送http请求,服务器直接处理请求, 如果客户端发送https请求,服务器将客户端套接字更改为SSLSocket? 谢谢

如何以Eclipse中的超级用户身份运行我的应用程序?

当我尝试从Eclipse运行我的服务器应用程序时,我遇到了错误。 错误是java.net.BindException:权限被拒绝 。 我想这是因为我使用端口443来建立SSL连接。 如果我使用java和sudo在命令行上运行我的代码,我可以解决这个问题。 有没有办法设置Eclipse,以便当我点击运行按钮时,我的应用程序是用sudo执行的?

基于SSL的JavaMail IMAP非常慢 – 批量获取多条消息

我目前正在尝试使用JavaMail从IMAP服务器(Gmail和其他人)获取电子邮件。 基本上,我的代码工作:我确实可以得到标题,正文内容等。 我的问题如下:当处理IMAP服务器(没有SSL)时,处理消息基本上需要1-2ms。 当我使用IMAPS服务器(因此使用SSL,例如Gmail)时,我的消息达到250米左右。 我只测量处理消息的时间(不考虑连接,握手等)。 我知道因为这是SSL,所以数据是加密的。 但是,解密的时间应该不那么重要,是吗? 我已经尝试设置更高的ServerCacheSize值,更高的connectionpoolsize,但我的想法很严重。 谁有人遇到这个问题? 解决了一个人可能希望? 我担心JavaMail API每次从IMAPS服务器获取邮件时都会使用不同的连接(涉及握手的开销……)。 如果是这样,有没有办法覆盖这种行为? 这是从Main()类调用的代码(虽然非常标准): public static int connectTest(String SSL, String user, String pwd, String host) throws IOException, ProtocolException, GeneralSecurityException { Properties props = System.getProperties(); props.setProperty(“mail.store.protocol”, SSL); props.setProperty(“mail.imaps.ssl.trust”, host); props.setProperty(“mail.imaps.connectionpoolsize”, “10”); try { Session session = Session.getDefaultInstance(props, null); // session.setDebug(true); Store store = session.getStore(SSL); store.connect(host, user, […]

如何查找Java中使用的SSL / TLS版本

我有一个基于Java的客户端(使用java 1.6.30),它打开了与Tomcat 7.0.26上部署的服务器的SSL连接。 Tomcat使用的是Java 6,在server.xml中我将连接器配置为使用sslProtocol=”TLS” 。 我想知道正在使用的SSL版本是什么? 是TLS1.0吗? TLS1.1? 别的什么?

javax.net.ssl.SSLException:收到致命警报:protocol_version

有没有人遇到此错误? 我是SSL的新手,我的ClientHello有什么明显的错误吗? 抛出该exception时没有ServerHello响应。 任何建议表示赞赏。 *** ClientHello, TLSv1 RandomCookie: GMT: 1351745496 bytes = { 154, 151, 225, 128, 127, 137, 198, 245, 160, 35, 124, 13, 135, 120, 33, 240, 82, 223, 56, 25, 207, 231, 231, 124, 103, 205, 66, 218 } Session ID: {} Cipher Suites: [SSL_RSA_WITH_RC4_128_MD5, SSL_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, […]

为什么SSL握手会给出“无法生成DH密钥对”的exception?

当我与某些IRC服务器建立SSL连接(但不是其他服务器 – 可能是由于服务器的首选加密方法),我得到以下exception: Caused by: java.lang.RuntimeException: Could not generate DH keypair at com.sun.net.ssl.internal.ssl.DHCrypt.(DHCrypt.java:106) at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverKeyExchange(ClientHandshaker.java:556) at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:183) at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:593) at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:529) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:893) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1138) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1165) … 3 more 最终原因: Caused by: java.security.InvalidAlgorithmParameterException: Prime size must be multiple of 64, and can only range from 512 to 1024 (inclusive) at com.sun.crypto.provider.DHKeyPairGenerator.initialize(DashoA13*..) at java.security.KeyPairGenerator$Delegate.initialize(KeyPairGenerator.java:627) at […]

如何在Java 6中使用TLS 1.2

看来Java 6支持高达v1.0的TLS,有没有办法在Java 6中使用TLS 1.2? 也许Java 6的补丁或特定更新会支持它?