* make i2d_X509 and d2i_X509 always available i2d_X509 and d2i_X509 have been available in all versions of OpenSSL, so make them available even if nimDisableCertificateValidation is set. * introduce getPeerCertificates, fixes #13299 getPeerCertificates retrieves the verified certificate chain of the peer we are connected to through an SSL-wrapped Socket/AsyncSocket. This introduces the new type Certificate which stores a DER-encoded X509 certificate.
This commit is contained in:
parent
ef2566218e
commit
0ac9c7bb64
4 changed files with 82 additions and 22 deletions
|
|
@ -95,6 +95,8 @@
|
|||
## runForever()
|
||||
##
|
||||
|
||||
include "system/inclrtl"
|
||||
|
||||
import asyncdispatch
|
||||
import nativesockets
|
||||
import net
|
||||
|
|
@ -743,6 +745,17 @@ when defineSsl:
|
|||
of handshakeAsServer:
|
||||
sslSetAcceptState(socket.sslHandle)
|
||||
|
||||
proc getPeerCertificates*(socket: AsyncSocket): seq[Certificate] {.since: (1, 1).} =
|
||||
## Returns the certificate chain received by the peer we are connected to
|
||||
## through the given socket.
|
||||
## The handshake must have been completed and the certificate chain must
|
||||
## have been verified successfully or else an empty sequence is returned.
|
||||
## The chain is ordered from leaf certificate to root certificate.
|
||||
if not socket.isSsl:
|
||||
result = newSeq[Certificate]()
|
||||
else:
|
||||
result = getPeerCertificates(socket.sslHandle)
|
||||
|
||||
proc getSockOpt*(socket: AsyncSocket, opt: SOBool, level = SOL_SOCKET): bool {.
|
||||
tags: [ReadIOEffect].} =
|
||||
## Retrieves option ``opt`` as a boolean value.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue