当前位置: 首页 > 知识库问答 >
问题:

Java中的SSLSocketFactory,LDAP网络连接

颛孙国源
2023-03-14

我的问题类似于:java中的SSLSocketFactory

我需要设置自定义SSLSocketFactory。。。但我没有https连接(它是LDAPS),因此无法使用:

HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

...设置SSLSocketFactory。我初始化了一个SSLContext对象,但当我建立LDAP连接时,会自动调用默认的SSLContext,因为我的自定义设置未设置:

dirContext = new InitialDirContext(env); // <-- reverts to default ssl context

以下第3行是否有非HTTPS等效方法:

>

  • SSLContext sc=SSLContext.get实例("SSL");

    sc.init(myKeyManagerFactory.getKeyManagers(),myTrustManagerArray,新java。安全SecureRandom());

    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

  • 共有1个答案

    张宣
    2023-03-14

    是的,有。

    env.put("java.naming.ldap.factory.socket", UnsecuredSSLSocketFactory.class.getName());
    

    UnsecuredSSLSocketFactory.java:

    public class UnsecuredSSLSocketFactory extends SSLSocketFactory
    {
        private SSLSocketFactory socketFactory;
    
        public UnsecuredSSLSocketFactory()
        {
            try
            {
                var sslContext = SSLContext.getInstance("TLS");
                sslContext.init(null, new TrustManager[]{new X509TrustManager()
                {
                    @Override
                    public void checkClientTrusted(X509Certificate[] xcs, String string){}
    
                    @Override
                    public void checkServerTrusted(X509Certificate[] xcs, String string){}
    
                    @Override
                    public X509Certificate[] getAcceptedIssuers()
                    {
                        return null;
                    }
                }}, new SecureRandom());
                socketFactory = sslContext.getSocketFactory();
            }
            catch(Exception e)
            {
                throw new RuntimeException(e);
            }
        }
    
        @SuppressWarnings("unused")
        public static SocketFactory getDefault()
        {
            return new UnsecuredSSLSocketFactory();
        }
    
        @Override
        public String[] getDefaultCipherSuites()
        {
            return socketFactory.getDefaultCipherSuites();
        }
    
        @Override
        public String[] getSupportedCipherSuites()
        {
            return socketFactory.getSupportedCipherSuites();
        }
    
        @Override
        public Socket createSocket(Socket socket, String string, int i, boolean bln) throws IOException
        {
            return socketFactory.createSocket(socket, string, i, bln);
        }
    
        @Override
        public Socket createSocket(String string, int i) throws IOException
        {
            return socketFactory.createSocket(string, i);
        }
    
        @Override
        public Socket createSocket(String string, int i, InetAddress ia, int i1) throws IOException
        {
            return socketFactory.createSocket(string, i, ia, i1);
        }
    
        @Override
        public Socket createSocket(InetAddress ia, int i) throws IOException
        {
            return socketFactory.createSocket(ia, i);
        }
    
        @Override
        public Socket createSocket(InetAddress ia, int i, InetAddress ia1, int i1) throws IOException
        {
            return socketFactory.createSocket(ia, i, ia1, i1);
        }
    
        @Override
        public Socket createSocket() throws IOException
        {
            return socketFactory.createSocket();
        }
    }
    
     类似资料:
    • 问题内容: Java类在使用时起什么作用?Java文档没有太大帮助。 有什么方法可以将密钥库和信任库与sslsocketfactory对象绑定,使其指向密钥库和信任库? 否则,连接如何知道密钥库和信任库的位置(我不想使用java )? 问题答案: 它通过SSLContext完成。初始化一个,然后使用它的套接字工厂创建HttpsConnection实例。 这是我如何在应用程序中进行管理的粗略示例:

    • 我正在尝试使用spring ldap 1.3.1连接到windows server 2008上的ldap active directory。发布和ldap配置如下所示: ldap url是:ldap://dc.fabrikam.com 用户名:管理员 密码:123456 -Springldap配置如下: > LDAPContactDAO: -在异常之前调试: 尝试使用getAllContactNa

    • 问题内容: 我一直在尝试让一个简单的网络测试程序无法运行。 服务器: 客户: 当我使用127.0.0.1或我的内部IP作为主机名时,该程序运行良好。但是,每当我切换到外部IP地址时,都会引发错误。 我特意选择了一个不常见的端口,以查看是否是问题所在,但没有运气。使用telnet可以毫无问题地进行连接,但是当我尝试使用canyouseeme.org访问端口时,它表明连接超时。我什至尝试禁用所有防火墙

    • 前几节介绍的LeNet、AlexNet和VGG在设计上的共同之处是:先以由卷积层构成的模块充分抽取空间特征,再以由全连接层构成的模块来输出分类结果。其中,AlexNet和VGG对LeNet的改进主要在于如何对这两个模块加宽(增加通道数)和加深。本节我们介绍网络中的网络(NiN)[1]。它提出了另外一个思路,即串联多个由卷积层和“全连接”层构成的小网络来构建一个深层网络。 NiN块 我们知道,卷积层

    • 如何找到对等节点(Peers) Geth不断尝试连接到网络上的其他节点,直到它找到peers。如果您在路由器上启用了UPnP,或者在面向Internet的服务器上运行其他方式,则它也将接受其他节点的连接。 Geth通过称为发现协议的东西找到peers。在发现协议中,节点相互通信以了解网络上的其他节点。为了一开始就可以执行,geth使用一组引导节点,其被记录在源代码中。 想要在启动时更改bootno

    • Selenium [移动 JSON 协议规范](https://github.com/SeleniumHQ/mobile-spec/blob/master/spec-draft.md) 支持一个获取和设置网络连接的[API](https://github.com/SeleniumHQ/mobile-spec/blob/master/spec-draft.md#104)。这个 API 会设置一个掩码