Я создаю клиент-серверное приложение для iPhone, сервер написан на c # и использует TcpListener для прослушивания входящих соединений и TcpClient для обработки каждого соединения.Код выглядит примерно так:
private void startAcceptingConnections()
{
m_Listener = new TcpListener(i_IPAddress, i_Port);
m_Listener.Start();
while (true)
{
//blocking
TcpClient tcpConnection = m_Listener.AcceptTcpClient();
Thread ClientAuthenticationThread = new Thread(new ParameterizedThreadStart(HandleClientConnection));
ClientAuthenticationThread.Start(tcpConnection);
}
}
private void HandleClientConnection(object i_Client)
{
TcpClient client = i_Client as TcpClient;
if (client != null)
{
NetworkStream clientStream = client.GetStream();
byte[] buffer = new byte[4096];
int bytesRead = 0;
//blocking
bytesRead = clientStream.Read(buffer, 0, 4096);
if (bytesRead == 0)
{
client.Close();
}
else
{
// do something with bytesRead
}
}
}
Я хочу добавить SSL в свое приложение, вот что я сделал до сих пор:
- В моем MacBook я создал сертификатПолномочия с помощью Keycahin
- Затем с помощью CA, созданного на первом этапе, я выдал сертификат SSL сервера (кажется, он называется Server Identity)
- Я связал CA в своем приложении для iPhone.
- Я экспортировал идентификатор сервера в виде файла .p12
Теперь я знаю, что мне нужно установить этот файл на моем сервере, но я не знаю как.Может кто-нибудь подсказать мне?
@@@@@ Я нашел этот код в MSDN, это все, что мне нужно добавить для поддержки SSL?
private void startAcceptingConnections()
{
string certPath = "C:\\...Path...\\ServerCertificates.p12";
serverCertificate = new X509Certificate(certPath, "serverCertPassword");
m_Listener = new TcpListener(i_IPAddress, i_Port);
m_Listener.Start();
while (true)
{
//blocking
TcpClient tcpConnection = m_Listener.AcceptTcpClient();
Thread ClientAuthenticationThread = new Thread(new ParameterizedThreadStart(HandleClientConnection));
ClientAuthenticationThread.Start(tcpConnection);
}
}
private void HandleClientConnection(object i_Client)
{
TcpClient client = i_Client as TcpClient;
try
{
NetworkStream clientStream = client.GetStream();
// A client has connected. Create the
// SslStream using the client's network stream.
SslStream sslStream = new SslStream(clientStream, false);
sslStream.AuthenticateAsServer(serverCertificate, false, SslProtocols.Tls, true);
byte[] buffer = new byte[4096];
int bytesRead = 0;
//blocking
bytesRead = clientStream.Read(buffer, 0, 4096);
if (bytesRead == 0)
{
sslStream.Close();
client.Close();
}
else
{
// do something with bytesRead
}
}
catch (AuthenticationException e)
{
Console.WriteLine("Exception: {0}", e.Message);
if (e.InnerException != null)
{
Console.WriteLine("Inner exception: {0}", e.InnerException.Message);
}
Console.WriteLine ("Authentication failed - closing the connection.");
sslStream.Close();
client.Close();
return;
}
}