2009-04-22 31 views
0

対象となるサーバーの証明書チェーンを取得する方法を探しています。私は既に私が接続時に表示されるサーバー証明書を取得できるようにするコードがありますが、チェーンの各サブ証明書をルートまでずっと引き出すオプションも欲しいと思います。証明書チェーンに各証明書を保存するには

ここでは、ターゲットサーバの公開鍵を取得するために使用するコードを示します。私はVB.NETを知っていたが、私はC#のサンプルを持っていることを好むだろうというとき残念ながら、私はこれの最終結果は、私は保存することができ、公開鍵のローカルコピーを持っているということです...

Private Function openSSLStream(ByRef server As ServerEntry) As SslStream 
    Dim sslStream As SslStream = Nothing 
    Dim newClient As New System.Net.Sockets.TcpClient 

    Try 
     newClient = New TcpClient 
     newClient.Connect(server.Name, server.Port) 
     sslStream = New SslStream(newClient.GetStream(), False, New RemoteCertificateValidationCallback(AddressOf ValidateServerCertificate), Nothing) 
     sslStream.AuthenticateAsClient(server.Name) 
     Return sslStream 
    Catch ex As Exception 
     Debug.WriteLine(ex.Message) 
     Return Nothing 
    Finally 
     If newClient.Connected Then newClient.Close() 
    End Try 
End Function 

Private Sub GetDetails(ByRef Server As ServerEntry) 
    Dim expcerdate As New Date 
    Dim newSSLstream As SslStream = openSSLStream(Server) 
    If Not newSSLstream Is Nothing Then 
     Dim newCertificate As New X509Certificate 
     Try 
      newCertificate = newSSLstream.RemoteCertificate() 
      expcerdate = CDate(newCertificate.GetExpirationDateString()) 
      Server.Subject = newCertificate.Subject 
      newCertificate.GetPublicKeyString() 
      Server.ValidFrom = newCertificate.GetEffectiveDateString() 
      Server.ValidTo = newCertificate.GetExpirationDateString() 
     Catch ex As Exception 
      Server.Subject = ex.Message 
     Finally 
      newSSLstream = Nothing 
      newCertificate = Nothing 
      expcerdate = Nothing 
     End Try 
    End If 
End Sub 

をこの背中を書きましたローカルドライブに転送します。私は、チェーン内の各証明書について同様のタスクを実行して、特定のターゲットサーバーの公開証明書の完全なリストを取得したいと考えています。

完全なアプリケーションを今日のように見てみると、download it from my siteです。

答えて

0

X509ChainとX509Certificate2コールで必要な答えを見つけました。コード全体を投稿するつもりはありませんが、ここで最も関連性の高い部分です:

Dim cert2 As X509Certificate2 
Dim ch As New X509Chain() 
ch.Build(cert2) 

Dim element As X509ChainElement 

For Each element In ch.ChainElements 
    blob = element.Certificate.RawData() 
Next Element 
関連する問題