26

特定のドメイン名の SSL 証明書からデータを取得しようとしています。たとえば、「http://stackoverflow.com」などの任意の Web サイト アドレスを入力すると、コードは最初に SSL 証明書が存在するかどうかを確認します。もしそうなら、証明書の有効期限を引き出してほしい。[ DB からドメイン名を読んでいます] 例 : http://www.digicert.com/help/

有効期限を確認する Web サービスを作成する必要があります。どうすれば実装できますか?? - RequestCertificateValidationCallback や ClientCertificates など、さまざまなものを調べました。

私は完全に間違っている可能性があります (したがって、なぜ助けが必要なのですか) が、HTTPWebRequest を作成してから、クライアント証明書と特定の要素をそのように要求しますか?

@ SSL certificate pre-fetch .NETで提供された例を試しましたが、forbitten 403 エラーが発生しています。

4

4 に答える 4

37

これが機能するには、プロジェクトに次への参照が必要ですSystem.Security

using System.Security;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;

//Do webrequest to get info on secure site
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://mail.google.com");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
response.Close();

//retrieve the ssl cert and assign it to an X509Certificate object
X509Certificate cert = request.ServicePoint.Certificate;

//convert the X509Certificate to an X509Certificate2 object by passing it into the constructor
X509Certificate2 cert2 = new X509Certificate2(cert);

string cn = cert2.GetIssuerName();
string cedate = cert2.GetExpirationDateString();
string cpub = cert2.GetPublicKeyString();

//display the cert dialog box
X509Certificate2UI.DisplayCertificate(cert2);

.NET コア 2.1 - .NET 5

HttpClientHandlerServerCertificateCustomValidationCallbackプロパティを使用できます。(このクラスは .net 4.7.1 以降でも使用できます)。

var handler = new HttpClientHandler
{
     UseDefaultCredentials = true,

     ServerCertificateCustomValidationCallback = (sender, cert, chain, error) =>
     {

          /// Access cert object.

          return true;
     }
 };

 using (HttpClient client = new HttpClient(handler))
 {
     using (HttpResponseMessage response = await client.GetAsync("https://mail.google.com"))
     {
          using (HttpContent content = response.Content)
          {

          }
      }
 }
于 2013-03-11T16:42:10.513 に答える
5

注意すべきことの 1 つは、設定する必要がある場合があることですrequest.AllowAutoRedirect = FalseHttpWebRequestそうしないと、サーバーが HTTPS を HTTP にリダイレクトすると、オブジェクトから証明書を取得できなくなります。

于 2015-02-09T03:46:09.863 に答える