1

我们最近将使用 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)\ r\n 在 Tamir.SharpSsh.jsch.jce.HMACMD5.update(Int32 i)\r\n 在 Tamir.SharpSsh.jsch.Session.read(Buffer buf)\r\n 在 Tamir.SharpSsh.jsch.UserAuth。开始(会话会话)\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 兼容性问题。

提前致谢。

4

2 回答 2

5

我发现我缺少对 Org.Mentalis.Security 的引用。

我一添加,一切正常。

谢谢

于 2014-06-18T13:12:38.787 回答
1

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

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

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

于 2016-08-11T17:50:53.797 回答