Tamir.SharpSSH Windows Server 2012兼容吗?

时间:2014-06-17 14:29:03

标签: sharpssh

我们最近将使用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兼容性问题。

提前致谢。

2 个答案:

答案 0 :(得分:5)

我发现我错过了对Org.Mentalis.Security的引用。

一旦我补充说,一切正常。

由于

答案 1 :(得分:1)

我遇到了这个,这是因为服务器已经通过组策略启用了FIPS加密。为了解决这个问题,我刚刚将以下代码行添加到app.config文件

<runtime> 
<enforceFIPSPolicy enabled="false"/> 
</runtime> 

这禁用了它,程序运行得很好。