将客户端证书设置为 Java HTTP 连接中的请求属性?

2023-12-01

我有一个 Java 应用程序,它通过带有 SSL 的套接字连接到另一个 Java 应用程序,因此我的客户端 JVM 已经具有-Djavax.net.ssl.keyStore and -Djavax.net.ssl.trustStore属性设置。

该应用程序需要向需要客户端身份验证的 Web 服务器发出一些 HTTP 请求。我可以使用打开连接URLConnection在 Java 中返回一个HTTPSURLConnectionImpl.

我想要在请求中向 Web 服务器提供的客户端证书与设置为我的 JVM 系统属性的客户端证书不同。有没有办法设置客户端证书。作为请求属性HTTPSURLConnectionImpl ?


直接通过设置 SSL“客户端证书”是不够的HTTPSURLConnectionImpl的请求属性,因为还需要数字签名来证明您拥有该证书。 SSL 已经自动完成所有这些工作,因此使用该层是有意义的。

您有两种方法可以解决未来的问题。

通过配置

您可以将客户端密钥和证书添加到 JVM KeyStore,当服务器要求您进行客户端 SSL 身份验证时,应该在运行时获取它。 (SSL/TLS 的设计目的是:服务器将要求提供由其可信机构签名的客户端证书,这允许 SSL 引擎选择正确的证书,即使您的 KeyStore 拥有许多证书)。

通过代码

你可以自己滚动SSLContext使用定制的KeyStore/TrustStores。 这有点复杂(我不会详细说明如何构建KeystoreJava 中的实例),但要点如下:

public static void main(String[] args) throws Exception {

KeyStore clientKeyStore = ... // Whatever
KeyStore clientTrustStore = ... // Whatever you need to load

// We build the KeyManager (SSL client credentials we can send)
KeyManagerFactory keyFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
keyFactory.init(clientKeyStore, "password".toCharArray());
KeyManager[] km = keyFactory.getKeyManagers();

// We build the TrustManager (Server certificates we trust)
TrustManagerFactory trustFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustFactory.init(clientTrustStore);
TrustManager[] tm = trustFactory.getTrustManagers();

// We build a SSLContext with both our trust/key managers
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(km, tm, null);
SSLSocketFactory sslSf = sslContext.getSocketFactory();

// We prepare a URLConnection 
URL url = new URL("https://www.google.com");
URLConnection urlConnection = url.openConnection();
// Before actually opening the sockets, we affect the SSLSocketFactory
HttpsURLConnection httpsUrlConnection = (HttpsURLConnection) urlConnection;
httpsUrlConnection.setSSLSocketFactory(sslSf);

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

将客户端证书设置为 Java HTTP 连接中的请求属性? 的相关文章

  • 在Java中将*s打印为三角形?

    我在 Java 课程中的作业是制作 3 个三角形 一份左对齐 一份右对齐 一份居中 我必须为什么类型的三角形制作一个菜单 然后输入需要多少行 三角形必须看起来像这样 到目前为止 我能够完成左对齐的三角形 但我似乎无法获得其他两个 我尝试用谷
  • 如果列名不同,则一对多休眠连接

    我有三个具有以下结构的表 合同 gt Contract id 主要 customer company id Vendor company id 公司 gt Company id 主要 创建日期 创建者 Company Timeline gt
  • 将一种类型的对象声明为另一种类型的实例有什么好处? [复制]

    这个问题在这里已经有答案了 可能的重复 Base b2 new Child 是什么意思 表示 https stackoverflow com questions 4447924 what does base b2 new child sig
  • 如何配置 Spring-WS 以使用 JAXB Marshaller?

    感谢您到目前为止对此的帮助 我正在更新问题 因为我没有显示我需要的所有内容 并显示了建议的更改 肥皂输出仍然不是我想要的 servlet xml
  • 项目缺少所需的注释处理库

    我的 Eclipse IDE 突然在问题视图中显示 xxxx 项目缺少所需的注释处理库 xxxx M2 REPO 中的一些旧 jar 我用谷歌搜索 没有找到任何答案 为什么我的项目使用旧的 jar 以及错误来自哪里 To remove th
  • OpenNLP 与斯坦福 CoreNLP

    我一直在对这两个包进行一些比较 但不确定该往哪个方向走 我简单地寻找的是 命名实体识别 人 地点 组织等 性别识别 一个不错的训练 API 据我所知 OpenNLP 和斯坦福 CoreNLP 提供了非常相似的功能 然而 Stanford C
  • 关于Java泛型的一些问题

    假设我有以下接口和实现类 interface Foo
  • Android volley使用RequestFuture.get()时出现超时异常

    在我的片段中 我尝试使用 TMDB 的开放电影数据库来获取有关 正在播放 电影的详细信息 如果我使用 RequestFuture get time TimeUnit 方法来执行此齐射请求 我总是会收到超时错误 如果我在 Safari 中手动
  • Java - JPanel 内有边距和 JTextArea

    我想创建这样的东西 主面板有其边距 x 并且 TextArea 位于该面板的中心 几乎填满了面板 底部是另一个具有自定义尺寸 高度 y 的面板 可以使用某些快捷方式将其切换为可见和不可见 底部面板有 FlowLayout 和几个元素 问题是
  • 查找数组中的组合

    我在java中有一个像这样的二维数组 transmission communication tv television approach memorycode methodact 我需要获得所有组合 例如 transmission appr
  • 更改 JComboBox 中滚动条的大小

    有谁知道如何手动更改 jComboBox 中的滚动条大小 我已经尝试了一大堆东西 但没有任何效果 好吧 我明白了 您可以实现 PopUpMenuListener 并使用它 public void popupMenuWillBecomeVis
  • 合并两个地图的最佳实践是什么

    如何将新地图添加到现有地图 地图具有相同的类型Map
  • 多线程——更快的方法?

    我有一堂有吸气剂的课程getInt 和一个二传手setInt 在某个领域 比如说领域 Integer Int 一个类的一个对象 比如说SomeClass The setInt 这里是同步的 getInt isn t 我正在更新的值Int来自
  • java swing:向 JTree 项目添加自定义图形按钮

    我想在 JTree 中的项目右侧添加一个带有小图标的附加按钮 这可以做到吗 如果是这样 怎么办 thanks Clamp 你在这方面成功了吗 我想做同样的事情 但很难让 JButton 响应用户 设置渲染器以显示按钮的过程很顺利 但所有鼠标
  • Java和手动执行finalize

    如果我打电话finalize 在我的程序代码中的一个对象上 JVM当垃圾收集器处理这个对象时仍然再次运行该方法吗 这是一个大概的例子 MyObject m new MyObject m finalize m null System gc 是
  • Java String ReplaceAll 方法给出非法重复错误?

    我有一个字符串 当我尝试运行时replaceAll方法 我收到这个奇怪的错误 String str something op str str replaceAll o n it works fine str str replaceAll n
  • android 中的 java.net.URL ..新手问题

    我是java新手 正在尝试android开发 以下代码生成 malformedURLException 有人可以帮助我识别异常吗 任何提示都会非常有帮助 package com example helloandroid import and
  • 如何清理 Runtime.exec() 中使用的用户输入?

    我需要通过命令行调用自定义脚本 这些脚本需要很少的参数并在 Linux 机器上调用 当前版本容易出现各种shell注入 如何清理用户给出的参数 参数包括登录名和路径 Unix 或 Windows 路径 用户应该能够输入任何可能的路径 该路径
  • 使用自定义比较器在 Java 中创建 SortedMap

    我想创建一个TreeMap在 Java 中具有自定义排序顺序 排序后的键是字符串 需要根据第二个字符进行排序 这些值也是字符串 示例地图 Za FOO Ab Bar 您可以像这样使用自定义比较器 Comparator
  • Jackson 反序列化相当于 @JsonUnwrapped 吗?

    假设我有以下课程 public class Parent public int age JsonUnwrapped public Name name 生成 JSON age 18 first Joey last Sixpack 我如何将其反

随机推荐

  • MVC (5) 根据另一个下拉列表填充[重复]

    这个问题在这里已经有答案了 我知道我可以制作一个包含以下列表的下拉菜单SelectedListItem gt and Html DropDownList someID 和操作系统 我的问题是 如果您有 2 个下拉列表 并且第二个下拉列表取决
  • 如何使用 ROW_NUMBER 对 gridview 和 SQL 自定义查询进行分页

    我有一个执行自定义查询的页面 该查询保存在数据库的某个位置 我需要能够在 gridview 上启用分页 例如 保存在数据库中的查询如下所示 select from requestbases 这将返回 10 000 行 使用下面的方法 我让它
  • mysql从多选中选择最低价格

    表价 user id b01 b02 b03 b04 b05 b06 b07 b08 b09 MP01 21 32 12 34 56 26 21 21 26 MO11 81 332 112 1 12 22 71 17 23 如何从价格 WH
  • 如何在 Spring 批处理中使用决策程序?

    我是 Spring 批次的新手 我创建了一个决策程序 它将 FlowExecutionStatus 返回为 是 否 基于FlowExecutionStatus 我需要打电话step2 or step3 在我下面的代码中 step2 在决胜局
  • WordPress l18n _x() 函数

    我正在尝试理解 WordPress 函数 x 根据 WordPress 网站的解释 在通过上下文消歧时使用 x 示例如下 if false commenttxt commenttxt x Comment noun if false trac
  • 用于求解线性丢番图方程的算法:ax + by = c

    我在这里寻找整数解决方案 我知道它有无数个从第一对解和 gcd a b c 导出的解 然而 我们怎样才能找到第一对解呢 有什么算法可以解决这个问题吗 Thanks Chan 请注意 并不总是有解决方案 事实上 只有一个解决方案 c是的倍数g
  • 关联类型的生命周期绑定被拒绝,尽管它看起来有效

    我有一段无法编译的代码 可以将其简化为以下代码片段 use std error Error use std convert TryFrom A trait that provides methods for parsing data int
  • 在 Bash 函数中使用 getopts

    我想用getopts在我在 bash profile 中定义的函数内 我的想法是我想传递一些标志给这个函数来改变它的行为 这是代码 function t echo getopts a OPTION echo OPTION echo OPTA
  • Tensorflow 2 中 tf.variable 的条件赋值

    对于 numpy 我们有 threshold 3 a np array 1 2 3 4 5 6 a a gt 3 199 a is 1 2 199 199 199 199 如何编写类似的代码tensorflow 2 b tf Variabl
  • Swift、SpriteKit:如何保存场景的整个进度

    我用 GameViewController swift 构建了一个快速游戏 import UIKit import SpriteKit class GameViewController UIViewController override f
  • XMLHttpRequest 上传进度未正确触发

    我正在尝试使用 XMLHttpRequest 发送文件 该文件正在工作 但我的进度监视器不工作 我尝试上传 700KB 文件和 3MB 文件 但遇到了同样的问题 progress 事件触发一次 并且仅触发一次 并且它表示 event loa
  • 如何使用 Google Cloud Vision API 读取一列文本

    我有下一个文档图像 当我尝试将图像转换为文本时 结果是这样的 Top Text Ref Rad Dte Ddo Ejecutivo 76520400300 Banco de Bogot Luz Adriana Bottom Text 问题是
  • Axios,向 Flask 发出 POST 请求

    我尝试使用 axios 向 Flask 服务器发送 POST var config headers Content Type application json Access Control Allow Origin axios post h
  • 静音 3D 触摸 快速操作

    由于新 iPhone 6s 6s 具有新的 3D Touch 功能 我正在尝试向我的应用程序添加一些主屏幕快速操作 我能够实现正常的力流 触摸主屏幕中的应用程序图标 gt 选择可用的快速操作之一 gt 在所有可能的应用程序状态下正确处理它
  • REPL、解释器和编译器之间的关系

    From 维基百科 REPL 通常被误称为 口译员 这是一个用词不当 很多 使用的编程语言 编译 包括字节码 编译 有 REPL 例如 Common Lisp 和 Python From 对此帖子的回复 交互式解释器使用 REPL 一个 口
  • 在 PHP 中动态访问类常量

    我希望能够动态查找常量的值 但使用变量不适用于语法 gives apple banana orange Fatal error Access to undeclared static property Food type 如何动态调用常量
  • 在 AppEngine Python 上使用 Reportlab 生成的 PDF 文档中添加图像文件的正确方法

    我正在尝试使用 App Engine Python 上的 reportlab 生成 PDF 报告 但我不知道如何正确附加图像 图像是静态的 这是我的项目的目录树 这就是我所做的 在 奇帕斯 py 获取图像 im Image static l
  • python脚本的CPU使用率

    是否可以检查简单脚本的CPU使用率 例如 如何获取打印 100 次 hello world 的 CPU 使用率 以百分比表示 目前我正在控制台中获取执行时间 方法是 time p python script py 如果你使用的是 UNIX
  • php 包含文件包含

    我正在一个网站上工作 并被要求包含位于我的 php 脚本上方的文件夹中的文件 问题是那些我被要求包含的 php 文件包含在其中 因此 在调用我的 php 页面时找不到它们引用的文件 处理这种情况的最佳方法是什么 将文件从文件夹 B 包含到文
  • 将客户端证书设置为 Java HTTP 连接中的请求属性?

    我有一个 Java 应用程序 它通过带有 SSL 的套接字连接到另一个 Java 应用程序 因此我的客户端 JVM 已经具有 Djavax net ssl keyStore and Djavax net ssl trustStore属性设置