対象となるサーバーの証明書チェーンを取得する方法を探しています。私は既に私が接続時に表示されるサーバー証明書を取得できるようにするコードがありますが、チェーンの各サブ証明書をルートまでずっと引き出すオプションも欲しいと思います。証明書チェーンに各証明書を保存するには
ここでは、ターゲットサーバの公開鍵を取得するために使用するコードを示します。私は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です。