接受 Java 中的证书

2023-11-30

我在通过 Java 与 HTTPS 站点交互时遇到问题。我的程序每次运行时都会使用一个带有不受信任证书的 URL。该程序必须在多个系统上运行。目前,我有以下内容:

public class A{
    HostnameVerifier hv = new HostnameVerifier(){
        public boolean verify(String urlHostName, SSLSession session){
            return true;
        }       
    };

    HttpsURLConnection.setDefaultHostnameVerifier(hv);

    javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1];
    javax.net.ssl.TrustManager tm = new miTM();
    trustAllCerts[0] = tm;
    javax.net.ssl.SSLContext sc = null;
    try {
        sc = javax.net.ssl.SSLContext.getInstance("SSL");
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    try {
        sc.init(null, trustAllCerts, null);
    } catch (KeyManagementException e) {
        e.printStackTrace();
    }
   javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
}
class miTM implements javax.net.ssl.TrustManager, javax.net.ssl.X509TrustManager{

    public java.security.cert.X509Certificate[] getAcceptedIssuers(){
        return null;
    }

    public boolean isServerTrusted(java.security.cert.X509Certificate[] certs){
        return true;
        }

    public boolean isClientTrusted(java.security.cert.X509Certificate[] certs){
        return true;
    }

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

    public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) throws java.security.cert.CertificateException{
        return;
        }
}

使用这段代码,我可以很好地执行以下操作:

URL url = new URL(urlString);
URLConnection cnx = url.openConnection();
cnx.connect();

InputStream ins = cnx.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(ins));
String curline;
while( (curline = in.readLine()) != null ) {
     System.out.println(curline);
}

但是,我不能执行以下操作:

httpClient = new HttpClient();
PostMethod postMethod = null;
int intResult = 0;
postMethod = new PostMethod(authURL);
Enumeration emParams = authParams.propertyNames();
while (emParams.hasMoreElements()) {
  String paramName = (String) emParams.nextElement();
  String paramValue = authParams.getProperty(paramName);
     postMethod.addParameter(paramName, paramValue);
}

intResult = httpClient.executeMethod(postMethod);
postMethod.releaseConnection();
ins.close();

执行executeMethod(postMethod) 时,我收到SSLHandshakeException、CertPathBuilderException 等。

我可以做什么来补救这个问题?我正在考虑接受证书或只是绕过所有证书验证(因为程序在专用网络内部运行)。

Thanks


看起来您正在使用 Apache HttpClient 3。如果这确实是版本 3,则您需要构建自己的SecureProtocolSocketFactory如中所解释的Apache HttpClient 3 SSL 指南。有一个例子在这里.

对于 Apache HttpClient 4,您应该能够传递SSLContext到 (HttpClient) 的构造函数SSLSocketFactory,如中所述这个问题的答案(包括有关主机名验证的注释)。

但是,一般来说,不要遵循这种方法。通过这样做,您实际上完全禁用了 SSL/TLS 连接的身份验证部分,从而使其容易受到 MITM 攻击。

您应该将服务器证书显式导入客户端的信任存储中,如中所述这个答案.

我正在考虑要么接受证书,要么绕过所有 证书验证(因为程序在内部运行 专用网络)。

您的意思是,您愿意仅在您的专用网络内使用 SSL/TLS 进行加密,因为您不够信任其用户,不会查看可能绕过其计算机的流量,但您也假设这些用户无法执行 MITM 攻击。这不太合理。如果你足够信任他们,你不妨明文发送数据。如果不这样做,那么您应该正确实施 SSL/TLS,包括身份验证步骤(证书和主机名验证)。

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

接受 Java 中的证书 的相关文章

  • SpringMVC 和 Hibernate:CannotCreateTransactionException:无法打开 Hibernate 会话进行事务;

    我正在尝试设置并Spring MVC 休眠项目 但它让我发疯 我还会考虑订购 xml 配置文件的建议 我有以下文件 web xml
  • Java 访问被拒绝

    C Program Files x86 Java jdk1 6 0 17 bin gt javac VendingMachine java VendingMachine java 27 error while writing Vending
  • 在 Java 中,三个 true 输入的 XOR 返回 true。为什么?

    下面的代码 System out println 1 0 0 true false false System out println 1 0 1 true false true System out println 1 1 0 true t
  • JaxB2Marshaller 未将 XML 绑定到 Kotlin 数据类

    我正在编写一个批处理作业来解析 XML 提取字段并将它们保存在数据库中 解析 XML 时 它会选取 2 个根元素 但将所有字段保留为空 因此在我的数据库中 我有 2 条记录将为空字段 似乎无法弄清楚为什么它无法读取元素 TIA Bean f
  • Gradle中的build-by-convention深度解释是什么?

    The 摇篮用户指南 http www gradle org docs current userguide userguide html经常提到 Gradle 是陈述性的和用途按惯例构建 这是什么意思 据我了解 这意味着 例如 在java插
  • 有没有办法在@Service上使用@ControllerAdvice

    我有一个项目需求 但我没有任何需求 Controller or RestController但我需要为我的服务层提供一个全局异常处理程序 所以我需要配置 ControllerAdvice on Service 请告诉我是否还有其他方法可以做
  • Java setLocation() 事故

    我正处于创建一个程序来操作员工 客户系统的开始阶段 现在我刚刚创建了登录 GUI 但我遇到了一些问题 setLocation 方法 我将其设置为 250 250 但这使我的 GUI 高度变得非常疯狂 如果有人能够解决这个问题 我的代码如下
  • 使用 JNDI 添加 LDAP 条目

    我正在尝试使用 JNDI 将条目添加到 LDAP 服务器 我可以成功地从 LDAP 服务器读取条目 但是当我尝试添加新条目时出现错误 我检查了各种方法但都失败了 private String getUserAttribs String se
  • 使用 GSON 将 JSON 字符串转换为 Java 对象

    我正在尝试将 json 解析为 java 根据 jsonlint com 我有以下字符串 该字符串是有效的 json private final static String LOC JSON lat1 39 737567 lat2 32 7
  • 调用本机方法时返回 java.lang.UnsatisfiedLinkError

    我正在尝试为第三方 DLL 制作 Java 包装器 我创建了自己的 DLL 充当 JNI 和第三方 DLL 之间的中间人 在java中我加载这个DLL很好但是错误java lang UnsatisfiedLinkError sixense
  • 为什么对象可以改变类变量的值?

    由甲骨文提供定义 http docs oracle com javase tutorial java javaOO classvars html 有时 您希望拥有所有对象共有的变量 这是通过 static 修饰符来完成的 声明中带有 sta
  • Eclipse java 断点 - 目的是什么?

    我正在学习 Android 教程 刚刚进入调试部分 我想知道断点的用途是什么 我还不能告诉 它实际上停止了应用程序 以便我可以确定它运行到该点 或者我可以设置多个断点并将它们用作标记来从断点到断点检查 停止和运行 我的代码 断点是执行停止的
  • node.js 我可以为同一个项目使用多个 ssl 证书和密钥吗?如何?

    我有我的贝宝 SSL 证书 https www webhostingtoolbox com kb how do i generate the needed ssl certificate for paypal ipn html对于为我的代码
  • JavaFX颜色选择器的语言

    有没有办法改变语言ColorPicker的文本 例如 自定义颜色 当前颜色 新颜色 色相 饱和度 亮度 不透明度 保存 使用 取消 编辑 以下答案适合那些需要更多内容的人exotic语言 如果您使用其中之一 de es fr it ja k
  • 从java小程序获取正确的本地IP地址

    我想从我的 java 小程序确定本地 IP 地址 问题是当同一台机器上有多个 IP 地址时 该机器具有 LAN 和互联网连接 掌上电脑 VMWare 这是我的测试 public static void main String args tr
  • java银行程序帐户ID不上去?

    每次创建银行帐户时 帐户 ID 都应增加 1 但每次我尝试提取 Id 时 我只会得到帐户 ID 为 0 任何建议 因为我完全按照我学习的书中的方式进行操作而且它仍然没有更新 帐户构造函数 public class BankAccount p
  • 如何从项目文件夹中的 jlabel 上设置图像?

    我正在尝试制作一个 Java 桌面应用程序 我想设置一个图像JLabel 我正在使用 NetBeans 从我的项目文件夹中 我的目录结构是 F gt MARKET src lib src defaultpackage demo java i
  • 将菜单添加到空活动

    我在 Android Studio 中制作了一个 Android 应用程序 并想在其上创建一个选项菜单 我将其创建为一个空活动 现在意识到我最好创建一个空白活动来获取选项菜单 无论如何 是否可以在空活动中创建选项菜单 如果有人能给我指出一个
  • Java中不同格式的字符串解析为日期

    我想转换String to Date以不同的格式 例如 我从用户那里得到 String fromDate 19 05 2009 i e dd MM yyyy format 我想转换这个fromDate作为日期对象 yyyy MM dd fo
  • JVM锯齿状空闲进程

    我目前正在进行一项涉及 JVM 及其内存使用工作原理的研究 我不明白的是 JVM在空闲时用什么填充它的内存 只是为了在堆几乎达到时释放它 为什么使用的内存不只有一条平线 顺便说一句 这个 java 应用程序托管在 glassfish 上 但

随机推荐

  • 调整 selecInput 使其同时适用于两种不同的方法

    我使用两种多标准方法来查找用于生成地图的簇号 方法有VIKOR and TOPSIS 对于每种方法 我需要知道标准的目标是什么 即是否最大化 max 或最小化 min 我有两个标准 所以我创建了两个selectInput供用户选择是否愿意m
  • 需要帮助使用 Bash 和 sed 着色/替换任意字符串

    我正在使用基于此处使用的技术的 bash 脚本 在 bash 中获取颜色输出为我的构建和其他脚本的输出着色 使内容更易于阅读 我的构建中的一个步骤执行 git pull 并且 git 服务器在一堆其他输出中吐出一个像这样的 欢迎 字符串 W
  • 使用Python或graphviz绘制鱼骨图

    我正在尝试用Python生成鱼骨图 因果图或石川图 有没有办法让它更像标准的鱼骨图 from graphviz import Digraph A HW Root SW Root Electric HW ink HW windows SW D
  • Quartus Prime 中的“多个常量驱动程序”Verilog 错误

    我正在致力于用 Verilog 设计一个有限状态机来表示堆栈 该模块如下 module state machine s Enable Clock Resetn c OF Err UF Err input 2 0 s input Enable
  • 具有表达式的属性中使用的可空 DateTime 返回意外的默认值

    我有以下两个方法扩展 public static class DateTimeConverter public static DateTime Convert this DateTime time gt time null new Date
  • Java中激活其他进程的窗口

    我有两个 Java swing 应用程序 意味着在两个 JVM 中运行 有什么办法可以在它们之间切换吗 通过 Java 代码激活另一个应用程序的窗口 您可以尝试使用JNA 我将使用 Maven 为您提供一些适用于 Windows 的代码 或
  • 在 MySQL 中存储 PDF 文件

    如何将 PDF 文档存储在 MySQL 的字段中 目前 我有一个客户列表 每个客户都有一个包含其帐户信息的证书 他们可以将其提供给其他公司以证明他们是我们的客户 目前 他们的证书以 PDF 格式导出并通过电子邮件发送给工作人员 客户也会收到
  • 导航组件 popUpTo bug

    最近我遇到了我询问的问题here 但当我试图弄清楚发生了什么时 我总是偶然发现同样的问题 这就是我所拥有的 我有一个集合 预览 编辑片段 我需要在片段之间进行导航 但是从编辑片段导航到预览片段后 我希望后退按钮将用户带到集合片段而不是编辑片
  • C# - 从 FTP 下载上次修改日期较高的文件

    我有一个包含一些文件的 FTP 服务器 我在本地目录中有相同的文件 在C 当我运行该程序时 我希望它搜索 FTP 服务器中上次修改时间戳晚于本地目录中相同文件 同名 的所有文件 并下载找到的所有文件 有人可以给我帮助或提示吗 我会感谢所有的
  • 将派生类序列化/反序列化为基类

    例如我有以下课程 public abstract class Device public class WindowsDevice Device public class AndroidDevice Device 现在我想将 WindowsD
  • 如何在 .Net Core Identity 中实施 2FA?

    问题 如何强制现有用户在 Net Core 3 1 Identity 中设置 2FA 我已经在这里看到了几个答案 但我对它们有如下问题 如果用户未设置 2FA 页面 则重定向用户以在登录时设置 2FA 页面 问题是用户可以简单地跳转到不同的
  • 如何使用 Java 将字符串保存到文本文件?

    在 Java 中 我有来自名为 text 的字符串变量中的文本字段的文本 如何将 text 变量的内容保存到文件中 如果您只是输出文本 而不是任何二进制数据 则以下内容将起作用 PrintWriter out new PrintWriter
  • 有条件地单独禁用 Serilog 接收器

    我的 net core 应用程序基本配置上有 Serilog 如下所示 Log Logger new LoggerConfiguration ReadFrom Configuration Configuration Enrich FromL
  • 在 C 中将指针的地址存储在 unsigned int 中

    是否可以将指针强制转换为 unsigned int 然后将其强制转换回指针 我试图将指向结构的指针存储在 pthread t 变量中 但我似乎无法让它工作 这是我的代码的一些片段 我正在创建一个用户级线程管理库 当我尝试打印线程的 tid
  • 打开文件夹并最大化文件夹窗口

    我有以下简单的 Powershell 脚本 ii E Source Development websites example com au root ii E Source Development websites example com
  • 生成所有可能的互质的排序列表

    我需要生成所有互质的无限排序列表 每对中的第一个元素必须小于第二个元素 排序必须按升序进行 按对元素的总和 如果两个总和相等 则除以该对的第一个元素 因此 结果列表必须是 2 3 2 5 3 4 3 5 2 7 4 5 3 7 2 9 3
  • Bootstrap 5 下拉菜单向右截断

    User 的下拉列表是 cuf of 我正在使用 Bootstrap 5 我在 stackoverflow 上阅读了一篇较旧的文章 建议将 dropdown menu left dropdown menu right on the 这对我不
  • 如何使用midlrt.exe将.idl编译为.winmd?

    背景 我需要构建一个 Windows 运行时组件作为设置为使用的系统的一部分CMake生成其构建系统 作为准备步骤 我尝试在命令行上构建它 从简单的 idl 文件 MyType idl 开始 namespace NS default int
  • cookie / MAMP / CodeIgniter 的问题

    我在使用 MAMP 和 Codeigniter 读取本地主机上的 cookie 时遇到问题 我正在尝试使用 cookie 来验证对管理区域的访问 我可以设置 cookie 我在浏览器上看到它 Chrome 但在授予访问权限后我无法读取它 我
  • 接受 Java 中的证书

    我在通过 Java 与 HTTPS 站点交互时遇到问题 我的程序每次运行时都会使用一个带有不受信任证书的 URL 该程序必须在多个系统上运行 目前 我有以下内容 public class A HostnameVerifier hv new