SSL 通信中的 Apache CXF 异常:SocketTimeOut

2024-02-10

所以这就是交易。我有一个 Web 服务 WSDL,需要对公司网络外部进行 SOAP 调用。 Web 服务是 HTTPS SOAP,并且需要客户端证书。我已经用 Java 生成了客户端代码wsdl2java,事情似乎进展顺利。

我现在无法做的是通过 CXF 从 Web 服务接收响应。 SSL 握手似乎进展顺利,甚至 CXF 尝试执行 HTTP POST,但在等待响应时超时(如下所示):

Allow unsafe renegotiation: false
Allow legacy hello messages: true
Is initial handshake: false
Is secure renegotiation: false
*** HelloRequest (empty)
main, SEND TLSv1 ALERT:  warning, description = no_renegotiation
Padded plaintext before ENCRYPTION:  len = 24
0000: 01 64 01 FD 5B 38 03 A6   70 41 57 58 6D 75 60 F7  .d..[8..pAWXmu`.
0010: 93 1F 02 F3 C4 46 01 01                            .....F..
main, WRITE: TLSv1 Alert, length = 24
[Raw write]: length = 29
0000: 15 03 01 00 18 0C 9B DF   1B 60 AB 12 EE C7 CF C9  .........`......
0010: 62 97 A5 5D 5F 14 48 E1   9F AD 8A 08 05           b..]_.H......
main, handling exception: java.net.SocketTimeoutException: Read timed out
main, called close()
main, called closeInternal(true)
main, SEND TLSv1 ALERT:  warning, description = close_notify
Padded plaintext before ENCRYPTION:  len = 24
0000: 01 00 BD 99 7A 7C 72 1F   BB 11 2D AB 3F 53 C9 CD  ....z.r...-.?S..

... continuing on

现在,如果我使用curl或类似的东西,我可以在不到一秒的时间内得到响应,所以我知道网络服务没有错误。下面是创建服务端口所需的完整代码,包括 TLS 和 HTTP 代理的设置。我也有一个非常简单的 JUnit 测试来创建和运行它:

public static MYPORT setupTLS(MYPORT port) throws IOException,
        GeneralSecurityException {

    HTTPConduit httpConduit = (HTTPConduit) ClientProxy.getClient(port)
            .getConduit();


    String keyPassword = "password";
    KeyStore keyStore = KeyStore.getInstance("pkcs12");
    URL pkcs12_file = MECTPortFactory.class.getResource(System
            .getProperty("pkcs12.keyFile"));
    InputStream keyFile = pkcs12_file.openStream();
    keyStore.load(keyFile, keyPassword.toCharArray());
    KeyManager[] myKeyManagers = getKeyManagers(keyStore, keyPassword);

    TLSClientParameters tlsCP = new TLSClientParameters();
    tlsCP.setKeyManagers(myKeyManagers);
    tlsCP.setDisableCNCheck(true);
    FiltersType cipher_suite_filter = new FiltersType();
    cipher_suite_filter.getInclude().add("SSL_RSA_WITH_3DES_EDE_CBC_SHA");
    cipher_suite_filter.getExclude().add(".*_DH_anon_.*");
    tlsCP.setCipherSuitesFilter(cipher_suite_filter);
    httpConduit.setTlsClientParameters(tlsCP);
    httpConduit.setClient(getHttpClient());

    return port;
}

private static HTTPClientPolicy getHttpClient() {
    HTTPClientPolicy client_policy = new HTTPClientPolicy();
    client_policy.setProxyServer("PROXY_SERVER_ADDRESS");
    client_policy.setProxyServerPort(8080);
    client_policy.setAutoRedirect(true);
    client_policy.setConnection(ConnectionType.KEEP_ALIVE);
    client_policy.setAllowChunking(true);
    client_policy.setReceiveTimeout(10000);
    return client_policy;
}

private static KeyManager[] getKeyManagers(KeyStore keyStore,
        String keyPassword) throws GeneralSecurityException, IOException {
    String alg = KeyManagerFactory.getDefaultAlgorithm();
    char[] keyPass = keyPassword != null ? keyPassword.toCharArray() : null;
    KeyManagerFactory fac = KeyManagerFactory.getInstance(alg);
    fac.init(keyStore, keyPass);
    return fac.getKeyManagers();
}

Edit:

我摆弄了一些客户端设置,例如更改是否自动重定向, 允许分块等等,没有差异,所以我不认为这会导致错误。

Edit2:

我没有收到网络服务的响应。如何排查并修复导致 CXF 超时而不是收到响应的原因?


我的天啊!我想到了。

所以我在互联网上闲逛,发现了这个小宝石:

如何使用客户端证书身份验证配置 SoapUI http://geekswithblogs.net/gvdmaaden/archive/2011/02/24/how-to-configure-soapui-with-client-certificate-authentication.aspx

它引用了 Oracle/Sun 的一个非常重要的注释:

传输层安全 (TLS) 重新协商问题自述文件 http://java.sun.com/javase/javaseforbusiness/docs/TLSReadme.html

收到来自对等方的重新协商请求的应用程序将 根据现有连接类型进行响应:

TLSv1:类型为“no_renegotiation(100)”的警告警报消息将是 发送到对等方,连接将保持打开状态。

然后,再往下:

通过设置新的系统属性,可以为需要重新协商的应用程序重新启用重新协商sun.security.ssl.allowUnsafeRenegotiation to true在 JSSE 库初始化之前。有多种方法可以设置该属性:

  1. 命令行:

    % java -Dsun.security.ssl.allowUnsafeRenegotiation=true Main

  2. Java 控制面板(Java 插件/Java Web Start)- 运行时环境。

  3. 在应用程序内:

    java.lang.System.setProperty("sun.security.ssl.allowUnsafeRenegotiation", true);

请注意,除非两者都满足,否则不会发生 TLS/SSL 重新协商 客户端和服务器已启用重新协商。

那么长和短呢?System.setProperty("sun.security.ssl.allowUnsafeRenegotiation", "true");

还有事情。只是。工作。

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

SSL 通信中的 Apache CXF 异常:SocketTimeOut 的相关文章

  • Android 中的 java.util.Observable 是线程安全的吗?

    Android 中的 java util Observable 是线程安全的吗 这文档 http developer android com reference java util Observable html说只有deleteObser
  • ListView:防止视图回收

    我有一个使用回收视图的 ListView 我试图阻止视图被回收 所以我使用 setHasTransientState android support v4 view ViewCompatJB setHasTransientState Vie
  • 使用 Eclipse 将具有外部依赖项的 Java 项目导出到 jar

    有没有一种简单的方法可以将 Java 项目 包括其所有外部依赖项 导出到标准 jar 文件 我开发了一个使用多个 Apache 库的 SDK 我希望能够将该项目作为单个 jar 发布 到目前为止我找到的这个问题的答案要求将项目打包为 Run
  • 如果主引用指向 null,WeakReference 或 SoftReference 有何不同

    我正在读关于WeakReference https docs oracle com javase 10 docs api java lang ref WeakReference html and SoftReference https do
  • 我应该使用 JDBC getNString() 而不是 getString() 吗?

    我们正在构建一个由 Oracle 数据库支持的 Java 应用程序 我们使用 JDBC 驱动程序 访问该数据库ojdbc6 jar and orai18n jar 数据库模式主要使用以下方式存储文本列NVARCHAR2数据类型 The JD
  • 为什么这个动作不抽象? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我很难理解为什么一个类中的一个操作是抽象的 而另一个类中的操作不是 源代码1 编译时出错 https gyazo com cd3c
  • 如何添加 Java 正则表达式实现中缺少的功能?

    我是 Java 新手 作为一名 Net 开发人员 我非常习惯Regex Net 中的类 Java 实现Regex 正则表达式 还不错 但它缺少一些关键功能 我想为 Java 创建自己的帮助器类 但我想也许已经有一个可用的了 那么 是否有任何
  • 为什么Java中的文件名与公共类名相同? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在Java中 文件名应该与文件名相同public class包含在该文件中 为什么这是一个限制 它有什么目的 Java 有一个有趣的方法 如果给
  • 单元测试、集成测试还是设计中的问题?

    我编写了我的第一个单元测试 我认为它过于依赖其他模块 我不确定是否是因为 这是一个复杂的测试 我实际上已经编写了集成测试或 我的设计有问题 我首先要说的是 虽然我有大约 4 年的开发经验 但我从未学过 也没有人教过自动化测试 我刚刚使用 H
  • Java 常量枚举[重复]

    这个问题在这里已经有答案了 可能的重复 理解 Java 中的枚举 https stackoverflow com questions 1419835 understanding enums in java 为什么我们应该使用枚举而不是 Ja
  • 在片段之间切换时底部导航栏会向下推

    在我的活动中 我有一个底部导航栏和框架布局来显示片段 一切正常 但问题是当我开始按顺序从 1 4 移动时 底部导航栏保持在其位置 但当我突然从 4 跳到2 然后底部导航栏就会超出屏幕 当再次单击同一项目时 它就会回到正常位置 该视频将清楚地
  • 将 PropertyPlaceholderConfigurer 中的所有属性注入到 bean 中

    我有一个PropertyPlaceholderConfigurer加载多个属性文件 我想通过配置 XML 将合并的属性映射注入到 Spring Bean 中 我可以这样做以及如何做 您只需创建一个属性 bean 并将其用于您的Propert
  • 测量 tomcat 的排队请求数

    因此 使用tomcat 您可以设置acceptCount值 默认为100 这意味着当所有工作线程都忙时 新连接被放置在队列中 直到队列满 之后它们被拒绝 我想要的是监视此队列中项目的大小 但无法确定是否有办法通过 JMX 获取此值 即不是队
  • 使用 Commons 或 Guava 将文本文件转换为 Java Set

    我想将文件中的每一行加载到 HashSet 集合中 有没有一种简单的方法可以做到这一点 怎么样 Sets newHashSet Files readLines file charSet 使用番石榴 参考 文件 readLines http
  • 在java中创建一个XML树并将其转换为json对象

    我尝试创建也能够转换为 json 的树 但对于只有一个xpath 当我尝试实现多个 xpath 时 我无法获得所需的输出 这里我分享一下我的实现 private static Document addElemtbypath List
  • FormsAuthentication:安全吗?

    Using 表单验证构建成asp net创建一个为经过身份验证的用户创建 cookie 的登录系统非常快速且简单 FormsAuthentication SetAuthCookie uniqueUsername false 与中的一些代码配
  • 接口中“不能降低继承方法的可见性”的含义

    我有两个文件 public interface PrintService void print PrintDetails details class PrintDetails private String printTemplate pub
  • AES 密钥是随机的吗?

    AES 密钥可以通过此代码生成 KeyGenerator kgen KeyGenerator getInstance AES kgen init 128 but 如果我有一个 非常可靠 的生成随机数的方法 我可以这样使用它吗 SecureR
  • while循环只执行一次

    我很难弄清楚为什么 while 循环实际上不会循环 它运行一次并停止 import java util public class mileskm public static void main String args Scanner inp
  • 使用ssl和socket的python客户端身份验证

    我有一个 python 服务器 需要客户端使用证书进行身份验证 我如何制作一个客户端脚本 使用客户端证书由 python 中的服务器使用 ssl 和套接字模块进行身份验证 有没有仅使用套接字和 ssl 而不扭曲的示例 from OpenSS

随机推荐

  • 使用 Modernizr 加载脚本...不工作

    我在尝试使用 Modernizr 版本的 yepnope 加载脚本时遇到问题 并且无法理解它们为何不同 如果我使用 yep nope 加载脚本 它可以正常工作
  • NSubstitute DbSet / IQueryable

    因此 EntityFramework 6 比以前的版本具有更好的可测试性 还有一些很好的例子 http msdn microsoft com en us data dn314429 queryTest在互联网上寻找像 Moq 这样的框架 但
  • 排序忽略标点符号 (Objective-C)

    我正在尝试对 iOS UITableView 对象进行排序 我目前正在使用以下代码 Sort terms alphabetically ignoring case self termsList sortUsingSelector selec
  • 如何查找映射驱动器的可用空间百分比?

    是否可以以编程方式查找映射驱动器中的可用空间 如何使用 ms dos 查找驱动器中可用空间的百分比 在硬盘中找到驱动器的可用空间可能很容易 但我需要找到映射驱动器的可用空间 我已经在我的系统中映射了一些文件服务器 可以在 我的电脑 中看到它
  • Octave并行计算

    我在网上找到了一些资料 表明 Octave 有一些工具可以并行化算法 但找不到任何细节或如何获取和使用它们 对此的任何帮助 见解都会很棒 http octave sourceforge net parallel http octave so
  • VSO 和单个产品团队的多个项目

    我们有一个由大约 10 名开发人员组成的团队正在开发新产品 我们已将此产品拆分为 Visual Studio Online 上的两个团队项目 开发人员可以在任何一个冲刺期间同时处理这两个项目 尽管我们有两个团队项目 但整个团队作为一个敏捷单
  • 如何解决:引用的 AMP URL 不是 AMP

    搜索控制台添加了一系列 引用的 AMP URL 不是 AMP 的问题 如果我使用 I get 然而 当我登记入住时https validator ampproject org https validator ampproject org 表
  • R 的同比百分比变化

    虽然我发现了几个类似的问题 但我无法在基础 R 中找到解决我的问题的简单方法 我想计算一组数据 此处为 y 值 的同比百分比变化 并将此 Delta 系列作为新列添加到我的数据框中 例如 gt x c 2000 2001 2002 2003
  • 我可以使用 Objective-C 将块作为 @selector 传递吗?

    是否可以传递一个 Objective C 块 selector论证中的一个UIButton 即 有什么办法可以让以下工作发挥作用吗 closeOverlayButton addTarget self action anotherIvarLo
  • 调用 SelectAll() 后,文本框的光标如何移动到文本的开头?

    在某些情况下 当焦点设置到特定文本框时 光标会自行停在文本之前 如下所示 然而 TextBox 有一个 GotFocus 处理程序 可以显式选择所有文本 private void txtQty GotFocus object sender
  • 如何在乘以 pandas DataFrame 时将 NaN 或未对齐的值视为 1 或 0

    我想将未对齐或缺失 NaN Inf Inf 值视为 1 或 0 df1 pd DataFrame x 1 2 3 4 5 y 3 4 5 6 7 index a b c d e df2 pd DataFrame y 1 NaN 3 4 5
  • 使用子进程获取实时输出[重复]

    这个问题在这里已经有答案了 我正在尝试为命令行程序 svnadmin verify 编写一个包装脚本 它将显示一个很好的操作进度指示器 这要求我能够在包装程序输出后立即看到输出的每一行 我想我只需使用以下命令执行该程序subprocess
  • HashSet什么时候调用equal方法? [复制]

    这个问题在这里已经有答案了 我在一个教程中找到了这个例子 当我运行这个时 我得到 hs size 值为 2 并且 equals 方法仅被调用一次 任何人都可以解释一下当 equal 方法在 HashSet 中调用时 import java
  • 如何在 Xcode 中查看打印消息?

    如何在 Xcode 中查看运行时打印的消息 例如以下行 print Testing 按 Y 或选择 视图 gt 调试区域 gt 显示调试区域 以显示控制台输出 或 C 激活控制台 通常 当程序产生输出时 此窗口会自动打开 这是由 Xcode
  • 如何更改高图中所选点的样式?

    我想更改所选点的样式 当我选择点时 它是灰色的 我希望所有选定的点都是红色的 您设置的样式markers state select as plotOptions series allowPointSelect true marker sta
  • 如何在 f# 中将记录字段定义为数组?

    我想创建一个包含 8 个元素的字节数组类型的记录字段 但无法找出正确的语法 我做了类似的事情 let dataRecord id int data byte array let dataValues byte array Array zer
  • 如果 Rubocop 规则被内联禁用,是否需要重新启用

    If you 禁用内联 Rubocop 规则 http rubocop readthedocs io en latest configuration disabling cops within source code并且不重新启用它 是否会
  • 如果我在 Web Worker 仍在使用时继续使用 postMessage() 会发生什么?

    我对网络工作者来说还很陌生 但我有一个问题是 考虑到以下情况 我生成一个网络工作者并设置onmessageWorker 中的处理程序 然后我用postMessage 在主线程中触发Worker的onmessage 我立即打电话给另一个人po
  • 无法将 Xcode 存档提交到 Itunes Connect。 “上传存档:将 API 使用情况发送到 Itunes Connect”

    您好 我一周前通过 Xcode 6 发送了我的应用程序的一个版本 它没有任何问题 今天 我尝试通过 Xcode 上传我的应用程序的新版本 上传时 进度条停留在 将 API 使用情况发送到 Itunes Connect 它不会给我任何错误 也
  • SSL 通信中的 Apache CXF 异常:SocketTimeOut

    所以这就是交易 我有一个 Web 服务 WSDL 需要对公司网络外部进行 SOAP 调用 Web 服务是 HTTPS SOAP 并且需要客户端证书 我已经用 Java 生成了客户端代码wsdl2java 事情似乎进展顺利 我现在无法做的是通