如何忽略 Java 应用程序外部的过期证书?

2023-12-13

我们有一个 Java 应用程序,需要忽略过期的自签名证书,但是我们无法修改代码来执行此操作。我想知道我们是否可以在启动时提供系统属性或环境变量,以便我们暂时忽略所有过期的证书,或者甚至更具体,并从外部提供我们希望过期的特定证书被忽略。

有人有任何可行的想法吗?


这是通过组合得到的解决方案java - 忽略过期的ssl证书 and Java SSL:如何禁用主机名验证.

public class IgnoreExpiredServerCertificateAgent {

    public static void premain(String args, Instrumentation inst) throws Exception {
        TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
        tmf.init((KeyStore) null);

        TrustManager[] trustManagers = tmf.getTrustManagers();
        final X509TrustManager origTrustManager = (X509TrustManager) trustManagers[0];

        TrustManager[] wrappedTrustManagers = new TrustManager[]{
                new X509TrustManager() {
                    @Override
                    public X509Certificate[] getAcceptedIssuers() {
                        return origTrustManager.getAcceptedIssuers();
                    }

                    @Override
                    public void checkClientTrusted(X509Certificate[] certs, String authType) throws CertificateException {
                        origTrustManager.checkClientTrusted(certs, authType);
                    }

                    @Override
                    public void checkServerTrusted(X509Certificate[] certs, String authType) throws CertificateException {
                        try {
                            origTrustManager.checkServerTrusted(certs, authType);
                        } catch (CertificateExpiredException ignored) {
                        }
                    }
                }
        };

        //SSLContext sc = SSLContext.getDefault();
        SSLContext sc = SSLContext.getInstance("TLS");
        sc.init(null, wrappedTrustManagers, null);
        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
    }
}

然后只需添加-javaagent:IgnoreExpiredServerCertificateAgent.jar程序的 java 启动参数。

也可以看看SSL 和 TLS 的区别及其在 Java 中的用法 and Java 8 SSLContext.getInstance("TLSv1.2") 是什么意思?为适当的论证SSLContext.getInstance()在你的情况下。


另请注意,证书过期的服务器也可能会自行检查匹配的客户端证书是否过期:

引起:javax.net.ssl.SSLHandshakeException:收到致命警报: 证书_过期于 com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174) 在 com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:136) 在 com.sun.net.ssl.internal.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1822) 在 com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1004) 在 com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1188) 在 com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1215) 在 com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1199) 在 sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:434) 在 sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166) 在 sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1195) 在 java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:379) 在 sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:318)

如果您遇到这样的堆栈跟踪,那么没有办法在不接触服务器的情况下缓解问题。 正确的解决方案是重新颁发具有未来到期日期的证书。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何忽略 Java 应用程序外部的过期证书? 的相关文章

  • 如何将log4j日志文件更改为utf8

    我收到了一个使用 log4j 作为记录器应用程序的代码 如何为其生成 UTF8 日志文件 log4j 创建的日志文件目前为 ASCII 格式 我已经尝试过以下操作 按照以下说明设置日志文件的文件编码 vi current set bomb
  • 如果我在 JSP 中有 html 元素,那么执行顺序是什么?

    什么将执行第一个 body 元素或 head 元素 Head Body scriplet 如果我明白您的要求 JSP 文件中的每个元素都会按照代码从上到下出现的顺序进行处理
  • while循环内的递归,它是如何工作的?

    你能告诉我这段java代码是如何工作的吗 public class Main public static void main String args Strangemethod 5 public static void Strangemet
  • 从 HashMap 条目列表中删除重复项

    我有一个List
  • 在 IIS 中运行 Java Web 应用程序

    有人找到了在 IIS 中运行 Java Web 应用程序的方法吗 在我看来 编写一个将 Jetty 或自定义 servlet 容器与 IIS 集成的 ISAPI 插件 这个词正确吗 应该是完全可能的 这样做的好处是 许多优秀的高端 Java
  • Android Studio 中没有参考文档

    昨天刚刚出现了一个新问题 当我将鼠标悬停在方法上或按 Ctrl Q 时 我通常会获取该特定方法的文档信息 但现在我只是得到 按 Ctrl QSharedPreferences getLong Following external urls
  • 在 Java 中停止线程? [复制]

    这个问题在这里已经有答案了 我正在编写一段代码 该代码连接到服务器 使用该连接生成一堆线程并执行一堆 东西 在某些情况下 连接会失败 我需要停止一切并从头开始使用新对象 我想在对象之后进行清理 但在线程上调用 thread stop 但此方
  • 如何将选定的项目移动到列表顶部

    List
  • 为什么ArrayList没有getSize()而不是size()?

    我在一些 JSP 页面中大量使用 ArrayList 我想像这样访问 ArrayList myArrayList size 但由于对象必须符合 JavaBean 标准 其中myArrayList getMyPropertyName is m
  • 在 iOS 上提升 Asio SSL 认证

    我正在尝试在 iOS 上使用 Boost Asio 并且已经解决了所有问题 但如何检查我正在连接的服务器的证书 如何使用 Boost Asio 在 iOS 中检查连接服务器的证书 在我的另一个答案中 您可以看到一个简单的 SSL 客户端 在
  • 在 Android 上解析 RSS

    我有几个 RSS 源需要为我的应用程序进行解析 我按照这里的优秀教程进行操作 http w2davids wordpress com android rssatom feeds parsing with rome http w2davids
  • 如何更改使用 Google ReCaptcha 版本 2 时的错误消息?

    当为 Google ReCaptcha 版本 2 选择多张照片时 会显示以下错误消息 需要多个正确的解决方案 请解决更多 如何将错误消息更改为我网站上的自定义消息 这是图像 我认为不可能在服务器端 在谷歌 进行 这可以在客户端通过利用 js
  • Android Studio安装JDK错误

    In Android Studio I am facing bellow error 当我按下时会显示此弹出窗口Alt Enter对于缺少的类 符号 当我点击 setup SDK 时 它显示两个选项 1 8 Java版本 1 8 0 60
  • 公交车公共交通算法

    我正在开发一个可以查找公交路线的离线 C 应用程序 我可以提取时间表 巴士 路线数据 我正在寻找适用于基本数据的最简单的解决方案 可以使用什么算法来查找从巴士站 A 到巴士站 B 的路线 是否有适用于 C Java 的开源解决方案 数据库的
  • 从 Spring 启动运行 Java 类

    我使用的是Java8和Spring4 3 1 我有一个 Java Spring 应用程序托管由浏览器和移动应用程序客户端访问的 RESTfult 服务 其次 我编写了一个侦听事件的聊天服务器 socket io 来自客户 该聊天服务器正在从
  • 我们可以将请求分派到 servlet 内的 HTML

    这可能吗 RequestDispatcher rd request getRequestDispatcher index html rd forward request response 是的 您可以将请求分派到 HTML 页面
  • 如何在两种不同模式、两种布局中设置方向?

    我有一个叫做Main XML我将方向设置为纵向AndroidManifest xml 我也为 Honeycomb 设计了这个布局并将其放置在layout xlarge mdpi文件夹 但我想使用Main XML in layout xlar
  • 找不到满足版本限制的“com.google.code.findbugs:jsr305”版本

    当生成签名的 APK 进行发布时 我收到此错误消息 Cannot find a version of com google code findbugs jsr305 that satisfies the version constraint
  • 为什么我得到:没有有效的 JFX 运行时

    我有一个使用 java 1 6 编译并使用 jnlp webstart 运行的现有应用程序 如果我使用 JRE 1 6 从客户端运行此应用程序 一切都会很好 但是 当我使用 java JDK 7 编译代码并使用 JRE 1 7 67 运行客
  • java有类似C#的属性吗? [复制]

    这个问题在这里已经有答案了 C 属性 我的意思是 get 和 set 方法 是一个非常有用的功能 java 也有类似 C 的属性吗 我的意思是我们如何在 java 中实现类似以下 C 代码的内容 public string Name get

随机推荐

  • 使用猫鼬进行 $lookup

    我有两个集合 例如清单和任务 两个模式如下所示 清单架构如下所示 id 5b7d0f77e231b6b530b0ee5a audit checklist type Weekly id 5b7d3f33e7a57f38084efb09 aud
  • 使用 JavaScript 动态过滤 HTML 表的行

    所以我有这张表 table border 1 align center tr td Broj pu td td Naziv pu td td ID td td Naselje td td zupanija td tr tr td td tr
  • 通过填充空格将字符串居中至指定长度

    我有一个名称向量 如下所示 x lt c Marco John Jonathan 我需要通过添加前导空格和尾随空格对其进行格式化 以便名称以 10 个字符的字符串居中 gt output 1 Marco John Jonathan 我希望有
  • Django - url 的动态视图

    我想根据 url 加载特定视图 例如 url r channel P
  • 如何调用与成员函数同名的内联友元函数?

    如此处所述C 11 风格的 SFINAE 和模板实例化上的函数可见性类成员函数掩盖了自由函数 使用完全限定名称通常是有效的 但是我在使用内联声明的其他类的友元函数时遇到了困难 考虑以下示例 namespace N struct C frie
  • 在 python 中追加到文件后没有 EOL

    我尝试使用以下代码使用 python 附加到文件 with open test txt a as myfile myfile write appended text 问题是 当我用 vim 打开文件时 我在底部收到来自 vim 的消息 te
  • 在 C 中使用 void* 指针的缺点

    使用起来有很多缺点void 在C中 内存相关 类型相关 效率方面 尽管如此 我们还是经常使用它们 因为它们提供了灵活性 列出使用的缺点 缺点void 以及 C 中的首选解决方案 如果可能 EDIT 请访问以下链接 http attracti
  • IIS FTP 是否包含用于检测文件上传何时完成的 API?

    我想使用 IIS FTP 服务器 但我需要能够判断特定用户的文件上传何时完成 我不想依赖于直接在 Windows 中监视文件更改 因为我认为我无法判断文件上传是否真正完成或已中止并且可能稍后完成 您可以使用自定义日志记录提供程序来执行此操作
  • 循环浏览网页并复制数据

    我为一位朋友创建了这个脚本 该脚本循环浏览一个房地产网站并为她获取电子邮件地址 用于促销 该网站免费提供它们 但一次获取一个很不方便 第一个脚本将每个页面的数据转储到名为 webdump 的 txt 文件中 第二个脚本从第一个 txt 文件
  • 如何使用yaml在doctrine2中模拟继承?

    如何以yaml方式声明doctrine2继承 我在学说文档中没有找到任何与此相关的代码片段 示例或食谱文章 当我尝试以doctrine1方式进行操作时 我收到一个错误 指出该实体没有主键 Thanks 尝试使用以下方法进行简单的模型继承ex
  • NVIDIA Fermi 中的 L2 缓存

    在查看NVIDIA Fermi架构中的性能计数器名称 cuda的doc文件夹中的Compute profiler txt文件 时 我注意到对于L2缓存未命中 有两个性能计数器 l2 subp0 read sector misses和l2 s
  • 获取IP地址

    In C IPHostEntry IPHost Dns GetHostEntry Dns GetHostName for int i 0 i lt IPHost AddressList Length i textBox1 AppendTex
  • 文件锁释放时收到通知

    使用C 和Windows作为平台 我有一台相机 可以将 JPG 文件写入电脑的本地文件夹中 我想加载相机丢弃的每个文件 因此我有一个 FileSystemWatcher 它会在创建新图片时通知我 但相机在写入文件时锁定文件 所以如果我在收到
  • Android,蓝牙配对后仅通过身份验证交换信息 //

    我想通过蓝牙与仅通过身份验证配对的 2 个 Android 设备交换一些信息 我已经在 Android 开发人员端看到了 Android 聊天示例示例 它运行良好 但现在我想要在 2 个设备的蓝牙配对后 想要相互交换一些信息 就像当设备将其
  • VueJS 渲染一次到一个元素中

    是否可以只渲染一次到一个元素中 假设我有一个 contenteditable div 并且只想渲染第一个值 然后随着模型更改而停止重新渲染 这里只取初始值variable将被渲染 div variable div Use v once di
  • Vite 网络 URL 在 Laravel 应用程序中打开 Vite 开发服务器

    当我跑步时vite run dev host在我的 Laravel 项目中 我的屏幕显示如下外网网址 我的外部网址是 http 192 168 1 6 5173 Local http localhost 5173 Network http
  • 在 window.onload 事件上初始化角度

    在第三方框架中 可以通过提供将由框架添加到窗口加载的 JavaScript 代码来修改 html 页面 可以将它们的内容写入 AddIn div 元素 我如何将角度应用程序注入到这个 div 元素 HTML js 中
  • 如何在 C# 中使用 iTextSharp 获取 pdf 文件中的特定段落?

    我在我的 C winform 应用程序中使用 iTextSharp 我想获取 PDF 文件中的特定段落 这在 iTextSharp 中可能吗 是和不是 首先是没有 PDF 格式没有文本结构的概念 例如段落 句子甚至单词 它只有文本串 事实上
  • 使用javascript分隔数组中的负数和正数

    我试图在 Javascript 中分离数组的负数和正数元素 这样之后首先出现所有负数元素 然后是正数元素 每个元素都按原始顺序排列 Example 输入数组 1 2 3 2 4 输出数组 3 2 1 2 4 输入数组 3 2 1 0 4 3
  • 如何忽略 Java 应用程序外部的过期证书?

    我们有一个 Java 应用程序 需要忽略过期的自签名证书 但是我们无法修改代码来执行此操作 我想知道我们是否可以在启动时提供系统属性或环境变量 以便我们暂时忽略所有过期的证书 或者甚至更具体 并从外部提供我们希望过期的特定证书被忽略 有人有