最近,我们将使用Tamir.SharpSSH的应用程序从Windows2003服务器转移到Windows 2012。
在测试应用程序的SFTP功能时,我们收到了以下错误:
{"Session.connect: System.NullReferenceException:对象引用未设置为对象的实例。\r\n在Tamir.SharpSsh.jsch.jce.HMACMD5.update(Byte[] foo,Int32 s,在Tamir.SharpSsh.jsch.jce.HMACMD 5. Int32 (Int32 i)\r\n at Tamir.SharpSsh.jsch.Session.read(Buffer buf)\r\n at Tamir.SharpSsh.jsch.UserAuth.start(会话)\r\n在Tamir.SharpSsh.jsch.Session.connect(Int32 connectTimeout)"}
我检查以确保FIPS兼容的算法是禁用的,而且它们是。
然后,我们从项目中删除了对Tamir.SharpSSH的DLL引用,并将源代码项目添加到其中,我们现在能够深入到代码中,以便更具体地确定SharpSSH库中的故障发生在哪里。
update()方法中的cs.Write(foo,s,l)出现了错误,如下所示:
public void update(byte[] foo, int s, int l) { cs.Write( foo, s, l); }这是因为cs对象引用为空。
cs对象引用应该在HMACMD5.cs (最后一行)的init()方法中设置,但是该方法似乎没有被调用。
public void init(byte[] key)
{
if(key.Length>bsize)
{
byte[] tmp=new byte[bsize];
Array.Copy(key, 0, tmp, 0, bsize);
key=tmp;
}
// SecretKeySpec skey=new SecretKeySpec(key, "HmacMD5");
// mac=Mac.getInstance("HmacMD5");
// mac.init(skey);
mentalis_mac = new Org.Mentalis.Security.Cryptography.HMAC(new System.Security.Cryptography.MD5CryptoServiceProvider(), key);
cs = new System.Security.Cryptography.CryptoStream( System.IO.Stream.Null, mentalis_mac, System.Security.Cryptography.CryptoStreamMode.Write);
} 但是,我不太清楚为什么不调用init()方法。
有人经历过这样的事情吗?
我想知道这是否是Windows 2012兼容性问题。
提前谢谢。
发布于 2014-06-18 13:12:38
我发现我漏掉了对Org.Mentalis.Security的引用。
我一加进去,一切都很好。
谢谢
发布于 2016-08-11 17:50:53
我遇到了这种情况,这是因为服务器通过组策略启用了FIPS加密。为了解决这个问题,我刚刚在app.config文件中添加了以下代码行
<runtime>
<enforceFIPSPolicy enabled="false"/>
</runtime> 这使它失效了,程序运行得很好。
https://stackoverflow.com/questions/24266455
复制相似问题