【发布时间】:2014-03-17 23:58:42
【问题描述】:
我正在使用 c#-4.0 和 EntireX Broker 9.5.1 开发应用程序我正在尝试转换为 tpcip 连接以使用 ssl。由于 Java/Software AG 使用 jsse 来处理 SSL/证书验证,我成功地升级了我的 java 代码以执行相同的操作。但是,当连接到.net 下的同一服务器/端口时,出现以下错误:02150403: Certificate expired or invalid
错误消息听起来像是在交流。那么如何让 .Net 成功验证证书呢?
PS:证书由威瑞信签名。
更新:
IE 和 Firefox 都在https://server.domain:port 上成功连接,而不会引发证书错误。我的应用程序实际上连接到 ssl://server:port?verify_server=yverify_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