java - 以编程方式添加证书时,自签名证书是否总是容易受到中间人攻击?

标签 java ssl jax-ws java-security

我正在创建一个需要接受自签名证书的 jax-ws 客户端应用程序。但是还有这个常见的 SSL Handshake exception problem当您尝试导入自签名证书时。因此,最常见的解决方法是扩展 JSSE 安全提供程序并初始化 SSL 上下文以接受所有证书,例如:

Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
TrustManager[] trustCerts = new TrustManager[]{new X509TrustManager() {
                        public X509Certificate[] getAcceptedIssuers() {
                            return null;
                        }

                       public void checkServerTrusted(X509Certificate[]
                       certs, String authType) throws CertificateException {
                            return;
                        }

                        public void checkClientTrusted(X509Certificate[]
                        certs, String authType) throws CertificateException {
                            return;
                        }
                    }
            }; 
SSLContext sc = SSLContext.getInstance("SSLv3");
sc.init(null, trustCerts, null);
SocketFactory factory = sc.getSocketFactory();
SSLSocket socket;
socket = (SSLSocket) factory.createSocket(mInstance.getHostName(),getSecureConnectionEndpoint().getPort());
socket.startHandshake();
setCerts(socket.getSession().getPeerCertificates());

这是我能找到的解决该问题的唯一方法。这里有很多类似的问题,例如 Import SSL certificates他们都提出了相同的解决方案。

这显然很容易受到中间人攻击,而且这个解决方案似乎仅用于测试目的是合法的。

所以我的问题是,当您尝试以编程方式导入证书时,是否没有办法使整个过程更加安全?

提前致谢!

最佳答案

This is obviously very prone to man in the middle attack and this solution seems to be legit only for testing purposes.

正确。这是非常不安全的。

So my question, is there no way of making this whole process more secure when you try to import certificates programmatically?

如果您通过您试图保护的 channel 进行操作,则不会。要信任的证书需要通过其他方式传递。

注意您发布的代码不满足 getAcceptedIssuers() 的约定。 它不能返回 null。

关于java - 以编程方式添加证书时,自签名证书是否总是容易受到中间人攻击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31719876/

相关文章:

ssl - Ansible:创建自签名 SSL 证书和 key

java - jaxWS "client"需要一种方法来跟踪原始 xml 请求和响应

java - 通过用户输入搜索2D ArrayList并在Java中显示行

java - RxJava Single<> 带有计数、谓词和延迟

java - Android ListView 根据页脚大小将内容包装到一定大小

Java动态获取总和

对 OpenSSL 非阻塞 I/O 感到困惑

Apache X509 证书授权模式设置 HTTP header

java - JAX-WS 2.2 和 JDK6 与 maven

java - 如何在 JAX-WS 中禁用 fastinfoset 并始终返回 XML 结果