调用 WebService 并有 SSL/证书问题

2023-12-24

首先,我对 Java 中设置密钥库等知识了解不多

我正在尝试调用 SOAP Web 服务,我获取了 wsdl,生成了代码等。在我部署它并尝试触发 WS 调用之前,一切看起来都很好。

这是我的设置:

  • 雄猫7.0.35
  • Java、jdk 1.6.0_39
  • pfx 文件和密码
  • 项目作为标准 Web 应用程序(war)部署到 tomcat

当我运行代码时,出现以下异常:

Caused by: javax.net.ssl.SSLHandshakeException: SSLHandshakeException invoking https://tallyservices-qa.olson.com/tallyDemo2WebServices/tallyDemo2/sms: Received fatal alert: certificate_unknown
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.mapException(HTTPConduit.java:1336)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1320)
    at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
    at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:622)
    at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
    ... 27 more
Caused by: javax.net.ssl.SSLHandshakeException: Received fatal alert: certificate_unknown
    at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
    at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:136)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1837)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1019)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1203)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1230)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1214)
    at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:434)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166)
    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1031)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:230)
    at org.apache.cxf.transport.http.URLConnectionHTTPConduit$URLConnectionWrappedOutputStream.setupWrappedStream(URLConnectionHTTPConduit.java:170)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleHeadersTrustCaching(HTTPConduit.java:1280)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.onFirstWrite(HTTPConduit.java:1231)
    at org.apache.cxf.transport.http.URLConnectionHTTPConduit$URLConnectionWrappedOutputStream.onFirstWrite(URLConnectionHTTPConduit.java:183)
    at org.apache.cxf.io.AbstractWrappedOutputStream.write(AbstractWrappedOutputStream.java:47)
    at org.apache.cxf.io.AbstractThresholdOutputStream.write(AbstractThresholdOutputStream.java:69)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1293)
    ... 30 more

我遵循了这里的建议:如何使用私钥将 .pfx 文件转换为密钥库? https://stackoverflow.com/questions/4217107/how-to-convert-pfx-file-to-keystore-with-private-key将证书安装到我的密钥库:

keytool -importkeystore -srckeystore C:\somefolder\mypfxfile.pxf -srcstoretype pkcs12 
-destkeystore C:\somefolder\clientcert.jks -deststoretype JKS

我得到了:

Enter destination keystore password: <mypassword>
Re-enter new password: <mypassword>
Enter source keystore password: <pxf_password>
Entry for alias 67eb31f6 successfully imported.
Import command completed:  1 entries successfully imported, 0 entries failed or
cancelled

到目前为止,一切看起来都很好,我弹起我的 tomcat 并再次点击 Servlet,但仍然遇到相同的错误。

我在这里还缺少什么?我需要告诉tomcat有关证书之类的信息吗?

预先感谢您对我在密钥库和证书领域的新手的帮助和歉意。

EDIT:所以我从 Carlo Pellegrini 的帮助中想到,我需要将密钥库添加到 tomcat: 所以现在,我的 tomcat 使用附加的 JAVA_OPTS 参数启动:

"-Djavax.net.ssl.trustStore=C:\somefolder\clientcert.jks -Djavax.net.ssl.trustStorePassword=somepassword"

现在我得到了:

Caused by: javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty

从这里:错误 - trustAnchors 参数必须非空 https://stackoverflow.com/questions/6784463/error-trustanchors-parameter-must-be-non-empty and 出现 java.security.InvalidAlgorithmParameterException:使用 cas 时 trustAnchors 参数必须为非空 https://stackoverflow.com/questions/6633164/got-java-security-invalidalgorithmparameterexception-the-trustanchors-parameter- 好像找不到我的信任库?

我想我之前的命令是:

keytool -importkeystore -srckeystore C:\somefolder\mypfxfile.pxf -srcstoretype pkcs12 -destkeystore C:\somefolder\clientcert.jks -deststoretype JKS

实际上将 pxf 放入keystore,不是信任库?

当我检查密钥库列表时:

C:\somefolder>keytool -list -keystore "C:\somefolder\clientcert.jks"
Enter keystore password:

Keystore type: JKS
Keystore provider: SUN

Your keystore contains 1 entry

67eb31f6, 13-Feb-2013, PrivateKeyEntry,
Certificate fingerprint (MD5): ... some fingerprint ...

所以我不确定我在这里错过了什么


您需要信任服务器证书。操作方法如下:

使用 Chrome(其他浏览器的说明可能有所不同):

  • 浏览服务站点。 (例子。https://localhost/myService)
  • 如果浏览器不信任它,请单击Proceed anyway,单击地址栏中的挂锁图标,没有弹出窗口,选择Connection选项卡和Certificate Information link.
  • 这应该打开证书查看器窗口,在其中选择Details,您应该查看Export ...按钮。选择 Base 64 编码的单一证书并将其另存为mysite.cer file.

这样就获取了证书,现在您需要将其导入信任库中。

现在将证书导入密钥库:

keytool -import -file mysite.cer -keystore mykeystore

这将创建一个新的文件密钥库文件mykeystore在当前目录中。

最后使用 JVM 参数启动 Web 服务客户端应用程序javax.net.ssl.trustStore as in:

java -Djavax.net.ssl.trustStore=mykeystore ... MyClientClass

或者,如果您在 Windows 中使用 Tomcat:

set JAVA_OPTS=-Djavax.net.ssl.trustStore=mykeystore
startup.bat

或者,如果您在 Unix 中使用 Tomcat:

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

调用 WebService 并有 SSL/证书问题 的相关文章

随机推荐

  • 以十六进制编码/解码字符串并返回

    给定一个可能包含任意字符 包括unicode字符 的字符串 如何将这个字符串转换为十六进制表示 然后反转得到这个字符串的十六进制 Use pack and unpack function hex2str hex return pack H
  • 在lua中表示unichar的方式是什么

    如果我需要以下 python 值 unicode char 0 gt gt gt unichr 0 u x00 我如何在Lua中定义它 没有一个 Lua 没有 Unicode 值的概念 Lua没有Unicode的概念at all 所有Lua
  • 使用 Java 创建 .eml(电子邮件)文件

    有人知道该怎么做吗 我获取了电子邮件的所有信息 正文 主题 发件人 收件人 抄送 密件抄送 并且需要从中生成 eml 文件 您可以使用以下代码创建 eml 文件 它可以与雷鸟以及其他电子邮件客户端一起正常工作 public static v
  • 如何从 Intellij IDEA 访问 cassandra 数据库

    我在2018年10月16日安装了intellij idea 2018 2 5 我正在尝试添加到面板 数据库 cassandra 为此 我转到 Intellij 中的 数据源和驱动程序 设置并添加 cassandra 的驱动程序 gt 图片来
  • 捕获图像,上传到 Firebase 并检索 Java Android Studio

    如果这可能是一个有简单解决方案的问题 我感到非常抱歉 我想做什么 从按钮捕获图像 将该图像上传到 Firebase 存储 在 ImageView 中检索该图像 到目前为止我遇到了什么麻烦 拍照 但当我单击勾号时崩溃 因此 没有任何内容被上传
  • 如何在黑莓手机中使用相机扫描图像?

    我已经开始了一个项目 我想在其中实现二维码扫描功能 举个例子 android 中的 ZXing 我想为黑莓操作系统 6 及更高版本实现 我想使用相机扫描实时图像 是否可以 如果是的话 那怎么可能呢 您必须使用条形码 API 它是针对 OS
  • 如何在 GAE 应用程序中执行异步 api 请求?

    我正在开发一个基于 GAE 和 python 2 7 13 的应用程序 我想做的是在处理程序内进行一堆异步 API 调用 像这样的东西 class MakeRequests webapp2 RequestHandler def post s
  • 根据页面位置更改背景颜色

    我只想根据滚动更改背景颜色 例如从红到蓝 该代码有效 但如何将灰色更改为颜色 http fiddle jshell net schmudde ffk6phq0 http fiddle jshell net schmudde ffk6phq0
  • 扩展图像字段以允许 pdf ( django )

    我的表单中有 ImageField 正如我发现的 它使用枕头来验证该文件实际上是一个图像 这部分很棒 但我也需要在此表单字段中允许 pdf 所以它应该检查文件是否是图像 如果不是 则检查它是否是pdf 然后加载并存储 如果 pdf 检查能够
  • 查找特定列中最后一行的更有效方法?

    我正在编写一个应用程序 它将把列从一张纸导入到另一张纸上 getLastRow 方法仅适用于整个工作表 但不能用于获取列的最后一行 存在请求此功能的问题 我在 Google Script Examples 的人员的 2D Array 库的帮
  • 将资源转换为 byte[]

    我在将图像资源转换为 byte 时遇到问题 例如 我有以下资源 pack application AppName component Assets Images sampleimage jpg 在我的程序中 如何将其转换为 byte 我尝试
  • 页面底部固定 div 停在给定位置的问题

    我们需要一个位于页面底部的页脚工具栏 并在页面滚动到某个区域下方时粘在该区域上 我们使用以下脚本实现了这一点 固定 div 位于页面底部并停止在给定位置 https stackoverflow com questions 5141425 f
  • 在 R 中绘制巨大的数据文件?

    我有一个大约有 2000 万行的输入文件 文件的大小约为1 2 G 无论如何我可以在R中绘制数据 有些列有类别 其中大多数是数字 我已经尝试使用大约 800K 行的一小部分输入文件的绘图脚本 但即使我有大约 8G 的 RAM 我似乎也无法绘
  • Java Swing 将 JPanel 添加到 JPanel

    情况 我目前正在尝试使用 Java 的 Swing 构建 2D 游戏 为此 我有我的主课Puzzle这是子类化JFrame 在我的框架中 我添加了我的主要内容JPanel它由几个组成JPanel添加在一起 每个都是一个新的部分 EDIT 2
  • 如何将 stdout 的输出转换为 golang 中的字符串

    我有以下代码 它将数据从 stdout 输出到文件 cmd exec Command ls lh outfile err os Create out txt if err nil panic err defer outfile Close
  • 最近的 Ubuntu 版本中有 libsresample 吗?

    我想知道哪个软件包涵盖了最新 Ubuntu 版本的 libswresample 也许还有早期版本 希望也包括 Debian 它完全被覆盖了吗 如果没有 我应该使用什么其他库来重新采样音频 最好是让它在任何地方都可以工作 即该库在任何地方都可
  • 将变量传递给 Flask WTForm

    我想使用从路由传入的默认值来执行查询选择字段 我不知道如何将变量从 View 传递到 Form 类 class transactionsForm Form loan id QuerySelectField trans id validato
  • unixaccept()函数两次返回相同的文件描述符

    我的多线程网络服务器程序有问题 我有一个正在侦听新客户端连接的主线程 我使用 Linux epoll 来获取 I O 事件通知 对于每个传入事件 我创建一个线程来接受新连接并为其分配一个 fd 在重负载下 可能会发生同一个 fd 被分配两次
  • Silverlight 的双击触发器

    Related Silverlight 中最简洁的单击 双击处理 https stackoverflow com q 1274378 1001985 在 XAML 中双击触发某些操作的最简单方法是什么 我正在尝试做这样的事情 当用户双击列表
  • 调用 WebService 并有 SSL/证书问题

    首先 我对 Java 中设置密钥库等知识了解不多 我正在尝试调用 SOAP Web 服务 我获取了 wsdl 生成了代码等 在我部署它并尝试触发 WS 调用之前 一切看起来都很好 这是我的设置 雄猫7 0 35 Java jdk 1 6 0