Ho un programma C# che si collega a un server web e visualizza la data di scadenza del certificato SSL.Come determinare se una connessione a un server Web utilizza Perfect Forward Secrecy?
Quello che vorrei sapere è come determinare se la connessione utilizza Perfect Forward Secrecy [PFS]?
using System;
using System.Net;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
ServicePointManager.ServerCertificateValidationCallback += ServerCertificateValidationCallback;
ServicePointManager.CheckCertificateRevocationList = true;
var request = WebRequest.Create("https://www.microsoft.com/");
var response = request.GetResponse();
Console.WriteLine("Done.");
Console.ReadLine();
}
private static bool ServerCertificateValidationCallback(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
Console.WriteLine("Certificate expires on " + certificate.GetExpirationDateString());
return true;
}
}
}
Avrei dovuto leggere, ma credo che ci siano modalità DH che * non * forniscono PFS. Penso che tu abbia bisogno di guardare in modo più specifico per * accordo chiave DH * effimero (suite di crittografia EDH_XXX). – erickson
Cerca DHE (EDH; Diffie-Hellman effimero) ed ECDHE (EECDH; Curva ellittica Diffie-Hellman effimero). Solo questi algoritmi di accordo chiave forniscono PFS. DH, ECDH e RSA no. – zakjan
Steven, ho ragione nella mia comprensione che stai dicendo che se si crea una connessione usando WebRequest.Create, allora non c'è modo di determinare quale tipo di crittografia viene utilizzata? – JonnyBoats