diff options
author | Christian Ulrich <christian@ulrich.earth> | 2020-03-22 21:00:37 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-22 21:00:37 +0100 |
commit | 0ac9c7bb642aefc18a9ca1a7b58f22aea6cf61ce (patch) | |
tree | 4095d436e1d61c088119463380ca54d65ba73a05 /lib/pure/asyncnet.nim | |
parent | ef2566218e701e6294608c6c30a367624786dcd6 (diff) | |
download | Nim-0ac9c7bb642aefc18a9ca1a7b58f22aea6cf61ce.tar.gz |
introduce getPeerCertificates, fixes #13299 (#13650)
* 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.
Diffstat (limited to 'lib/pure/asyncnet.nim')
-rw-r--r-- | lib/pure/asyncnet.nim | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/lib/pure/asyncnet.nim b/lib/pure/asyncnet.nim index 88852fb84..8bdab88b1 100644 --- a/lib/pure/asyncnet.nim +++ b/lib/pure/asyncnet.nim @@ -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. |