Является ли Tamir.Совместим ли SharpSSH с Windows Server 2012?

#sharpssh

#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) 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.start(сеанс сеанса) r n в Tamir.SharpSSH.jsch.UserAuthNone.start(сеанс сеанса) r n в Tamir.SharpSSH.jsch.Session.connect(Int32 ConnectTimeout) «}

Я проверил, чтобы убедиться, что алгоритмы, совместимые с FIPS, отключены, и они есть.

Затем мы удалили ссылку DLL на Tamir.SharpSSH из проекта и добавил проект исходного кода, в котором мы теперь можем перейти к коду, чтобы более конкретно определить, где происходит сбой в библиотеке SharpSSH.

Ошибка возникает при cs.Write(foo, s, l) в методе update (), как показано ниже:

     public void update(byte[] foo, int s, int l) { cs.Write( foo, s, l); }
  

Это связано с тем, что ссылка на объект cs равна НУЛЮ.

Предполагается, что ссылка на объект cs должна быть установлена в методе init() HMACMD5.cs (последняя строка), однако не похоже, что этот метод вызывается.

 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.

Заранее спасибо.

Ответ №1:

Я обнаружил, что мне не хватает ссылки на Org.Mentalis.Безопасность.

Как только я добавил это, все работало нормально.

Спасибо

Ответ №2:

Я столкнулся с этим, и это было потому, что на сервере было включено шифрование FIPS с помощью групповой политики. Чтобы решить эту проблему, я просто добавил следующие строки кода в файл app.config

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

Это отключило его, и программа работала нормально.