我創建使用的TcpListener代理服務器和TcpClient的客戶端和代理之間和代理服務器和目標服務器之間的通信C#中的TCP代理。這工作真的很好。瞭解服務器/代理/客戶端證書與.NET sslstream
我也有支持SSL和TLS加密通訊。 這個作品幾乎良好。我創建一個從代理到目標服務器與本守則SslStream:
var sslStream = new SslStream(remoteStream, false);
sslStream.AuthenticateAsClient(state.RemoteHost);
我創建一個從代理到客戶機的SslStream用下面的代碼:
var sslStream = new SslStream(state.ClientStream, false);
sslStream.AuthenticateAsServer(certificate, false, SslProtocols.Tls | SslProtocols.Ssl3 | SslProtocols.Ssl2, true);
該證書是由加載X509Store:
X509Certificate2 certificate;
var store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);
var certificates = store.Certificates.Find(X509FindType.FindBySubjectDistinguishedName, "CN=localhost", false);
store.Close();
if (certificates.Count == 0)
{
Console.WriteLine("Server certificate not found...");
return;
}
else
{
certificate = certificates[0];
}
這也適用於如果我強制客戶端手動信任證書。
我的問題是:
- 我怎麼能強制(所有)客戶端信任的證書?
- 哪種類型的證書對代理服務器上的所有客戶端都有效?
- 如果需要,我必須安裝哪種客戶端證書來強制客戶端信任代理?
- 如何使用openssl或makecert創建所需類型的代理?
我不想隧道SSL通信投擲代理,因爲我需要讀取和操縱流。
[UPDATE] 是的,我用谷歌和在StackOverflow搜索,我嘗試了一些不同的解決方案沒有任何成功。 我也試過在下面的線程解決方案:
SSLStream example - how do I get certificates that work?
How do I identify my server name for server authentication by client in c#
[UPDATE2] 這是一個非常好的教程建立CA和使用OpenSSL的服務器證書,但它不」 t爲我工作: http://webserver.codeplex.com/wikipage?title=HTTPS&referringTitle=Home