1

我正在实现一个使用 Web 服务的 VB.NET 桌面应用程序。

用 Java 实现的 Web 服务,我目前在本地主机上使用 Tomcat 来托管 Web 服务。

Web 服务需要与客户端进行安全通信,因此我按照说明如何使用 Java 的 keytool.exe 创建两个 .jks 密钥库(一个用于客户端,一个用于服务器),然后创建两个 .cer 证书(一个一个用于客户端,一个用于服务器)

我已将生成的密钥库和证书放入 Web 服务期望它们的目录中(根据说明)

我已将证书安装到 TrustedPeople 中,并尝试通过设置 ClientCredentials.ClientCertificates 属性来使用证书,如下所示:

myServiceProxy.ClientCredentials.ClientCertificate.SetCertificate(storeLocation.CurrentUser, StoreName.TrustedPeople, X509FindType.FindByIssuerName, "name")

当我尝试调用任何方法时,我不断收到以下错误消息:

处理 <wsse:Security> 标头时发现错误

我的问题是我不知道如何在使用 Web 服务的 VB.NET 客户端应用程序中使用它。我可能做错了。任何有关此主题的指导将不胜感激。

谢谢,

-弗林尼

4

2 回答 2

0

当我不得不使用证书和 WS 时,我也遇到了很多问题。使用证书 MMC并验证:

  • 您将证书放置在正确的位置。请注意,有一个 CurrentUser 存储、Machine Store 等。请确保根据您的代码将证书放入正确的存储中。
  • 哪个用户正在运行您的应用程序?证书是否位于其商店中?证书必须对用户可见。
  • 打开证书并确保它是受信任的(如果不是,您将看到警告)。您可能需要将 CA 的证书放在受信任的证书颁发机构存储中。
  • 确保您在每一方使用的算法都得到另一方的支持。
  • 请注意,您正在通过颁发者名称查找证书X509FindType.FindByIssuerName, "name"打开证书,确保颁发者名称匹配(我猜不是,因为它看起来像示例中的复制和粘贴)。

如果所有这些都失败了,请尝试使用证书位置(我隐约记得能够使用来自一个位置而不是另一个位置的证书的一些问题),以及用于搜索证书的属性。

另外,由于您询问了证书,所以我回答了有关证书的问题。检查是否存在内部异常并查看是个好主意——这可能是另一个问题。

于 2010-09-26T11:32:44.947 回答
0

虽然我已经 10 年没有编写过 VB 代码了,但这应该可以帮助您入门:http ://www.example-code.com/vbdotnet/ssl_client_certificate.asp

特别是这看起来像是在加载包含证书的文件: certStore.LoadPfxFile("chilkat_secret.pfx","secret")

这会提取证书并将其用于连接:

Dim cert As Chilkat.Cert
cert = certStore.FindCertBySubjectCN("Chilkat Software, Inc.")
If (cert Is Nothing ) Then
    MsgBox(certStore.LastErrorText)
    Exit Sub
End If


socket.SetSslClientCert(cert)
于 2010-09-16T14:14:43.933 回答