微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决拒绝访问“ 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,不建议更改默认值。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。