#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>
Это отключило его, и программа работала нормально.