Я ищу способ получить цепочку сертификатов целевого сервера. У меня уже есть код, который позволяет мне захватить сертификат сервера, который представлен при подключении, но мне также хотелось бы, чтобы каждый суб-сертификат в цепочке полностью привязывался к корню.Как сохранить каждый сертификат в цепочке сертификатов
Вот код, который я использую для получения открытого ключа целевого сервера. К сожалению, я написал это назад, когда я только знал, 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.