Как получить открытый ключ веб-браузера (используется в HTTPS) - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть программа, которую я разрабатываю, вокруг браузера с цифровой подписью значения.

План состоял в том, чтобы использовать сертификат HTTPS, встроенный в браузер, для подписи, но весь подход зависит от получениядоступ к общедоступному ключу HTTPS-сертификата браузера.

Как получить к нему доступ в коде сервиса Javascript или ASP.NET?

В Google я ничего не получаю (лучшее, что я могу найти)это то, что позволяет общаться через пользовательские сертификаты, но не тот, который браузер использует для HTTPS).

1 Ответ

0 голосов
/ 29 ноября 2018

Обычно мы подписываем наш запрос открытым ключом, который присутствует в файле .crt.В соответствии с этим доменом у нас есть файл .pfx, который содержит закрытый ключ и присутствует на сервере.

С помощью приведенного ниже кода вы можете получить полную цепочку сертификатов.Обычно у нас есть функция ServerCertificateValidationCallback, которая используется для проверки цепочки сертификатов, но здесь мы используем ее для доступа к сертификатам, которые мы проверяем.Итак, нам нужно зарегистрировать обратный вызов «ServerCertificateValidationCallback» для нашего запроса.

Ниже приведен код консоли, который возвращает нам сертификат:

public static void Main(string[] args)
{
    GetCertificate("https://www.facebook.com", "");
}
/// <summary>
/// Get and write certificate from URL into file in path
/// </summary>
/// <param name="_URL">URL of website with certficate</param>
/// <param name="_path">Path where you want to store certificate</param>
private static void GetCertificate(string url, string path)
{

        var request = (HttpWebRequest)WebRequest.Create(url);
        request.AllowAutoRedirect = false;
        request.ServerCertificateValidationCallback = ServerCertificateValidationCallback;

        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        response.Close();
        Console.ReadLine();

}

private static bool ServerCertificateValidationCallback(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
    foreach (var cert in chain.ChainElements)
    {
        Console.WriteLine(cert.Certificate.FriendlyName);
        Console.WriteLine(ExportToPem(cert.Certificate));
    }

    return true;
}

/// <summary>
/// Export a certificate to a PEM format string
/// </summary>
/// <param name="_cert">The certificate to export</param>
/// <returns>A PEM encoded string</returns>
public static string ExportToPem(X509Certificate2 cert)
{
    StringBuilder strBuilder = new StringBuilder();

    try
    {
        strBuilder.AppendLine("-----BEGIN CERTIFICATE-----");
        strBuilder.AppendLine(Convert.ToBase64String(cert.Export(X509ContentType.Cert), Base64FormattingOptions.InsertLineBreaks));
        strBuilder.AppendLine("-----END CERTIFICATE-----");

    }
    catch (Exception)
    {
    }

    return strBuilder.ToString();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...