Я портирую java client на mumble на C#, и я ударил немного кирпичной стены.Портирование приложения SSL с Java на C#
В Java сокет SSL начинается так:
final SSLContext ctx_ = SSLContext.getInstance("TLS");
ctx_.init(null, new TrustManager[] { new LocalSSLTrustManager() }, null);
final SSLSocketFactory factory = ctx_.getSocketFactory();
final SSLSocket sslSocket = (SSLSocket) factory.createSocket(hostAddress, port);
sslSocket.setUseClientMode(true);
sslSocket.setEnabledProtocols(new String[] { "TLSv1" });
sslSocket.startHandshake();
Я портирована это C# как это:
return ssl = new SslStream(netStream, false, (a, b, c, d) => true); //For now, accept any cert
ssl.AuthenticateAsClient(serverName);
Теперь, это на самом деле установить соединение, но это используя AES128, а mumble protocol требует AES256, поэтому сервер, как представляется, игнорирует все, что я посылаю в этом сокете.
Действительно ли мой код правильно портирован? И есть ли способ заставить C# использовать AES256 для этого соединения?
Зачем серверу принимать соединения AES-128, если протокол запрещает его? Как вы знаете, что ваш java-клиент использовал AES-256, и как вы знаете, что клиент C# использует AES-128? –
В потоке SSL есть свойство, которое сообщает вам тип используемого шифрования, в данном случае AES, с прочностью 128. Оказывается, проблема, с которой я столкнулась, не была сервером, игнорирующим вещи, это была плохая документация пакетов макетов. Тем не менее, я все равно хотел бы знать, есть ли способ заставить шифрование до 256 бит. – Martin
Несомненно, просто включите только те комплекты шифров на сервере, которые используют AES-256. Вы можете сделать то же самое на клиенте, но это может быть немного сложнее. Быстрый Google нашел: http://stackoverflow.com/questions/91304/nets-sslstream-is-always-negotiating-to-the-least-secure-cipher-i-have-how-ca –