首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何允许java代码接受使用自签名或弱sslv2协议完成的握手

如何允许java代码接受使用自签名或弱sslv2协议完成的握手
EN

Stack Overflow用户
提问于 2012-10-07 07:29:56
回答 1查看 1.8K关注 0票数 1

我有一个java代码,试图创建ssl握手与网站。当网站的ssl证书是自签名的或使用不安全的选项时,我收到错误,代码无法提取证书。

代码语言:javascript
复制
SSLSocket socket=null;
SSLSocketFactory factory=null;
factory = HttpsURLConnection.getDefaultSSLSocketFactory();

try{
    socket = (SSLSocket) factory.createSocket(host, port);          
    System.out.println("listen on port "+port+" for host "+host);

    } //end try

    catch (IOException ex)
        {
            //remote host is not listening on port 443
            System.out.println("Can not listen on port "+port+" of host"+host);
        } //end catch

        System.out.println("Creating a SSL Socket For "+host+" on port "+port);
        SSLSession ss = socket.getSession();
        socket.startHandshake(); // start the handshake
        System.out.println("Handshake Done");

作为一个例子,我得到了以下错误:

代码语言:javascript
复制
Exception in thread "main" javax.net.ssl.SSLHandshakeException: Insecure renegotiation is not allowed

如何让我的java代码接受带有自签名和弱ssl配置的完整握手?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-08 08:10:08

这里至少有3个可能的问题。削弱您的SSL/TLS配置几乎总是一个坏主意。

  • 首先,您可以启用一些默认情况下未启用的密码套件。Sun Provider documentation中列出了支持的和默认情况下启用的。您可以在SSLSocket/SSLEngine上使用setEnabledCipherSuites启用特定的加密套件。值得一读的是关于特定cipher suites in the TLS specification的脚注和注释(尤其是匿名密码套件提供的安全性不足)。

  • 重新协商的问题略有不同。您可以使用system property introduced in the updatesun.security.ssl.allowUnsafeRenegotiation。顾名思义,这是不安全的。

  • 接受任何证书是另一个问题。通常,您应该导入所需的特定证书。但是,您可以从在检查服务器证书时从不抛出任何异常的X509TrustManager构建SSLContext。这里或其他网站上有许多这种不安全代码的示例。

JSSE的默认行为往往是相当合理的。引入不安全的行为应该谨慎行事。学习/实验是可以的,但在生产软件(甚至是原型)中这样做是值得怀疑的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12764776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档