拒绝访问“ javax.net.ssl.SSLPermission”“ setDefaultSSLContext” setDefault

问题描述

我正在使用下面的代码来信任所有证书,并且代码在容器化环境中运行,由于访问被拒绝(“ 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();
            

}

解决方法

来自SSLContext

setDefault

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

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

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

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

如果您确实确定要执行此操作,则需要为您的应用程序授予必要的权限。例如通过policy file

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

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

(JDK 11的所有链接)

,

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...