Код: Выделить всё
SSLConnection = new System.Net.Security.SslStream(SSLInOutStream, false, new System.Net.Security.RemoteCertificateValidationCallback(AlwaysValidRemoteCertificate), new System.Net.Security.LocalCertificateSelectionCallback(ChooseLocalCertificate));
X509CertificateCollection CC = new X509CertificateCollection();
CC.Add(Org.BouncyCastle.Security.DotNetUtilities.ToX509Certificate(MyLocalCertificate));
SSLConnection.AuthenticateAsClient("test", CC, System.Security.Authentication.SslProtocols.Ssl3, false);
код, вероятно, выглядит немного странно, потому что проект немного странный, но я думаю, что это не имеет значения. SSL-квитирование завершено. Проблема в том, что вместо отправки сообщения сертификата от моего имени (в процессе установления связи) с сертификатом в кодировке ASN.1 (MyLocalCertificate) SslStream отправляет номер предупреждения SSL 41 (без сертификата), а затем продолжает работу. Я знаю это по анализу пакетов. После завершения рукопожатия SslStream помечает IsAuthenticated как true, IsMutuallyAuthenticated как false, а его член LocalCertificate имеет значение null.
Я чувствую, что, вероятно, упускаю что-то довольно очевидное. здесь, поэтому любые идеи будут оценены по достоинству. Я новичок в SSL, и этот проект находится в стороне от проторенных дорог, поэтому я в некоторой растерянности.
P.S. 1: Моя процедура ChooseLocalCertificate вызывается дважды во время рукопожатия и оба раза возвращает действительный (насколько я могу судить) ненулевой сертификат.
P.S. 2: SSLInOutStream — это мой собственный класс, а не NetworkStream. Однако, как я уже сказал, рукопожатие происходит в основном нормально, поэтому я сомневаюсь, что это виновник... но кто знает?
Подробнее здесь: https://stackoverflow.com/questions/293 ... -sslstream
Мобильная версия