【问题标题】:what is the JSSE equivalent for .NET (C#)?.NET (C#) 的 JSSE 等价物是什么?
【发布时间】:2014-03-17 23:58:42
【问题描述】:

我正在使用 EntireX Broker 9.5.1 开发应用程序我正在尝试转换为 tpcip 连接以使用 ssl。由于 Java/Software AG 使用 来处理 SSL/证书验证,我成功地升级了我的 代码以执行相同的操作。但是,当连接到 下的同一服务器/端口时,出现以下错误:
02150403: Certificate expired or invalid

错误消息听起来像是在交流。那么如何让 .Net 成功验证证书呢?

PS:证书由威瑞信签名。

更新:
IE 和 Firefox 都在https://server.domain:port 上成功连接,而不会引发证书错误。我的应用程序实际上连接到 ssl://server:port?verify_server=y
verify_server=n 会引发相同的证书错误。

证书未过期。异常的堆栈跟踪在Broker.Logon(); 处停止。

在 SoftwareAG.EntireX.NETWrapper.Runtime.Broker.Logon(字符串密码)
在 FAServer.EntireXDotNetClasses.EntireXWrapper.CreateBroker() 在 C:\Users\tfburton\Documents\Visual Studio 2010\Projects\NEW FADCOM\FAServer\EntireXDotNetClasses\EntireXWrapper.cs:line 1302

更新:
下面是我如何创建我的 Broker 对象。

try
{
  Broker mybroker;
  try { mybroker = new Broker(BrokerName, BrokerUser); }
  catch (Exception e)
  {
     Utilities.LogEntry("Error Creating broker instance -- BEFORE LOGON. ", e, true);

     throw new WrapperException("Error Creating broker instance -- BEFORE LOGON. "
                               + Environment.NewLine + e.Message);
  }
  try //{ mybroker.Logon(BrokerPass); }
  {
     mybroker.Password = BrokerPass;
     mybroker.Logon();  //<-- stracktrace points here
  }
  catch (AccessViolationException ave)
  {
     Utilities.LogEntry("Error During Broker Logon.", ave, 
                        EventLogEntryType.Error);

     throw new WrapperException(ave); //wrap and duck
  }
}
catch ( Exception e )
{   
   Utilities.LogEntry("Error Creating broker instance. ", e, true);

   XException be = e as XException; 
   if ( null != be  ) //<-- resolves to true
   {
      String msg = "Certificate error connecting to: " + BrokerName;

      throw new WrapperException(msg, e);
   }
   throw new WrapperException( "Error Creating broker instance. " 
                             + Environment.NewLine + e.Message);  //<-- error caught and re-thrown here

}

【问题讨论】:

  • "证书过期或无效" 表示服务器上的证书有问题。只是想知道,您成功尝试使其与 JSSE 一起使用是否涉及任何自定义信任管理器(忽略错误的那种)?另一条调查线是检查服务器是否使用服务器名称指示 (SNI) 以及两个客户端是否同样支持它(或不支持),这可能会导致客户端使用不同的证书。 (Java 7 客户端通常支持 SNI。)
  • 默认的信任管理器,验证它就好了。无需定制。 (一旦我修复了一个单独的错误,为信任库设置了错误的密码。)
  • 当 Verisign 颁发的证书通常应该使用默认信任存储(即不指定任何内容)来信任时,您需要摆弄信任存储密码似乎很奇怪。您的服务器证书是否受 IE 信任(例如)?我会检查 SNI 是否与 Wireshark 一起使用(在 ClientHello 消息中查找 server_name 扩展名,以及您是否实际上获得了与两个客户端相同的服务器证书。
  • 我有一个 java 应用程序连接到一个单独的 https 网络服务,使用第二个/单独的密钥库来存储一些自签名证书。我错误地在该应用程序中设置了全局属性而不是本地属性。如果我没有这样做,我根本不需要在 Java 中做任何摆弄。明天我会检查一下我在工作时是否在 IE 中遇到任何证书错误。
  • 您是否有一些代码要显示给失败的应用程序?

标签: c#-4.0 java jsse .net c# java ssl jsse webmethods


【解决方案1】:

原来我找错树了。

我不确定 .NET 是否有 JSSE 的等价物。

结果我的解决方案要简单得多,将根证书连接到一个文本文件中并添加

trust_store=path\to\file\myrrootcerts.pem

作为 url aka 的参数

BROKER-ID

【讨论】:

  • 只是一个观察...您应该需要添加整个根证书集合来验证一个证书。通常,一个证书由一个 CA 签名。如果会签,可能会再多一个 CA。
  • IIRC,该文件中有大约 5 个证书。根源和几个中介。
  • 啊,最终实体或证书应该包括构建有效链所需的所有中间证书(没有链的根)。它是 PKI 中一个众所周知的问题,称为“哪个目录”问题(您刚刚经历过)。有关更多信息,例如添加中间体和创建PFXPKCS12 文件,请参阅Unable to load certificates when trying to generate pfx file
猜你喜欢
  • 2010-10-02
  • 1970-01-01
  • 1970-01-01
  • 2014-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多