我们最近将使用Tamir.SharpSSH的应用程序从Windows 2003服务器迁移到了Windows Server 2012.
在测试我们应用的SFTP功能时,我们收到了此错误:
{“Session.connect:System.NullReferenceException:对象引用未设置为对象的实例。\ r \ n在Tamir.SharpSsh.jsch.jce.HMACMD5.update(Byte [] foo,Int32 s,Int32 l)\ t \ r \ n at Tamir.SharpSsh.jsch.jce.HMACMD5.update(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.UserAuthNone.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对象引用为NULL。
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 Server 2012兼容性问题。
提前致谢。
答案 0 :(得分:5)
我发现我错过了对Org.Mentalis.Security的引用。
一旦我补充说,一切正常。
由于
答案 1 :(得分:1)
我遇到了这个,这是因为服务器已经通过组策略启用了FIPS加密。为了解决这个问题,我刚刚将以下代码行添加到app.config文件
<runtime>
<enforceFIPSPolicy enabled="false"/>
</runtime>
这禁用了它,程序运行得很好。