1

我正在使用下面的代码来信任所有证书并且代码在容器化环境中运行,我收到异常,因为访问被拒绝(“javax.net.ssl.SSLPermission”“setDefaultSSLContext”)和在普通 tomcat 服务器上运行的相同代码工作正常

 URL destinationURL = null;
    SSLContext context = null;
TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
                    @Override
                    public X509Certificate[] getAcceptedIssuers() {
                        //return new X509Certificate[1];
                        return null;
                    }
                    @Override
                    public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                        //DO
                    }
                    @Override
                    public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                        //DO
                    }
                } 
                };
            try {
                context = SSLContext.getInstance("SSL");
                context.init(null, trustAllCerts, null);
                SSLContext.setDefault(context);

                //proxy details here
                    destinationURL = new URL('url');
                    HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());
                    HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
                        public boolean verify(String hostname, SSLSession session) {
                            
                            return true;
                    }
                });
                
            } catch (Exception e) {
                e.printStackTrace();
            

}

4

2 回答 2

0

来自SSLContext

默认设置

抛出:SecurityException- 如果安全管理器存在并且其checkPermission方法不允许SSLPermission("setDefaultSSLContext")

默认情况下不授予此权限,因为它被认为是不安全的。来自SSLPermission

恶意代码可以设置一个上下文来监视连接的打开或传输的明文数据。

更改默认 SSLContext 的推荐方法是通过 JVM 启动选项。但是,您正在尝试有效地禁用所有信任,这也是不安全的,并且不受系统属性的支持。

如果您真的确定要执行此操作,则需要授予您的应用程序必要的权限。例如,这将通过策略文件

grant codeBase "file:/home/ajay/myunsafecode" {
    permission javax.net.ssl.SSLPermission "setDefaultSSLContext";
};

或者,只是不要更改默认值SSLContext并直接使用您的不安全。

(JDK 11 的所有链接)

于 2020-11-02T10:51:55.060 回答
0

您可以使用指定的 SSLContext 构建可用于 URL 连接的 socketfactory,不建议更改默认值。

于 2020-11-03T08:48:48.050 回答