Skip to content

Instantly share code, notes, and snippets.

@evetsleep
Created February 3, 2022 21:05
Show Gist options
  • Save evetsleep/7e25c2027c2fde78a4adfa252a62e12c to your computer and use it in GitHub Desktop.
Save evetsleep/7e25c2027c2fde78a4adfa252a62e12c to your computer and use it in GitHub Desktop.
Export server certificates to variables and PEM formats
function Export-ServerCertificate {
[CmdletBinding()]Param(
[Parameter(Mandatory,ValueFromPipelineByPropertyName)]
[Alias('HostName')]
[String]
$ComputerName,
[Parameter(Mandatory,ValueFromPipelineByPropertyName)]
[Alias('TCPPort')]
[ValidateRange(1,65000)]
[int]
$Port
)
process {
$toPEM = @{
MemberType = 'ScriptMethod'
Name = 'ToPEM'
Value = {
$stringBuilder = [System.Text.StringBuilder]::new()
[void]$stringBuilder.AppendLine('-----BEGIN CERTIFICATE-----')
[void]$stringBuilder.AppendLine([System.Convert]::ToBase64String($this.RawData,1))
[void]$stringBuilder.AppendLine('-----END CERTIFICATE-----')
$stringBuilder.ToString()
}
}
try {
$tcpSocket = [Net.Sockets.TcpClient]::new("$ComputerName",$port)
$tcpStream = $tcpSocket.GetStream()
$sslStream = [System.Net.Security.SslStream]::new($tcpStream,$false,[System.Net.Security.RemoteCertificateValidationCallback]{ $true })
$sslStream.AuthenticateAsClient($ComputerName,$null,'TLS12',$true)
$certificate = [System.Security.Cryptography.X509Certificates.X509Certificate2]::new($sslStream.RemoteCertificate)
$certificate | Add-Member @toPEM
Write-Output $certificate
}
catch {
$PSCmdlet.ThrowTerminatingError($PSItem)
}
finally {
$tcpSocket.Close()
}
}
<#
.SYNOPSIS
Connect to a remote host over TCP and if presented with a TLS 1.2 certificate return an exportable version of it.
.DESCRIPTION
Using .NET, connect to a remote host over a defined port using the .NET sockets TCP client and then export the presented certificate.
.PARAMETER ComputerName
The DNS name of the server to connect to.
.PARAMETER Port
The TCP port to connect to.
.EXAMPLE
$certificate = Export-ServerCertificate -ComputerName www.microsoft.com -Port 443
PS > $certificate
Thumbprint Subject EnhancedKeyUsageList
---------- ------- --------------------
4A3B9F272C26B6AE4EF2788436EC6B4CFD0522DB CN=www.microsoft.com {Server Authentication, Client Authentication}
PS > $certificate.ToPEM()
-----BEGIN CERTIFICATE-----
MIITYzCCEUugAwIBAgITMwAoZ3uxMMkOpnUasQAAAChnezANBgkqhkiG9w0BAQwFADBZMQswCQYD
VQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSowKAYDVQQDEyFNaWNyb3Nv
ZnQgQXp1cmUgVExTIElzc3VpbmcgQ0EgMDYwHhcNMjIwMTI0MDQzOTU2WhcNMjMwMTE5MDQzOTU2
WjBkMQswCQYDVQQGEwJVUzELMAkGA1UECBMCV0ExEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoT
FU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEWMBQGA1UEAxMNbWljcm9zb2Z0LmNvbTCCASIwDQYJKoZI
hvcNAQEBBQADggEPADCCAQoCggEBAOQEAE5s2SaoAJhlyqPLY+wkuaYISvIxYPsXDfszfoE7szsx
CJf64VxawAc3iXUWOqiPuHMB+jdYz7z4h636tGzAUNrrAjdbq3cBmasVws5P4YiUF1hN/A6+9Ljp
rRupquvLrIHPLjF+Q5uCeWrWDu/VjFnyVOnErcVTAVDQ4jeu743V3F3I6/ocLGj+huCEai5+hbd3
j8cKsG1R+Jioo52IWsryPpWzRxBuKQYm1derwos4LzIsZUzfAwPfQK8h138Ic5vbmTqlXykWboaw
bAQdhm6kKxRAlavP1jIPuVeFFS3e1lmr2l7nbxd4LjFQIjBij5vv2RzABBApo+sM5IkCAwEAAaOC
Dxcwgg8TMIIBgAYKKwYBBAHWeQIEAgSCAXAEggFsAWoAdgCt9776fP8QyIudPZwePhhqtGcpXc+x
DCTKhYY069yCigAAAX6Ka1Y+AAAEAwBHMEUCIQDBkv7Rff+Dqw98aAYsebo3ynM4evuYd4pZDr+l
BptxFAIgS0kaBEzCWuM5zPFNvSGw1p/9qzRSU4vPO4zqb5JgFRgAdwB6MoxU2LcttiDqOOBSHumE
FnAyE4VNO9IrwTpXo1LrUgAAAX6Ka1aQAAAEAwBIMEYCIQC7MRY74UcIYN1yM+T2DQQs7XjiRJA5
EA4wg9uxAJiuIgIhAJukGNT9jeTideto7WtbMtIlHROgRvYaASPFPRF9InKOAHcAs3N3B+GEUPhj
htYFqdwRCUp5LbFnDAuH3PADDnk2pZoAAAF+imtWvgAABAMASDBGAiEA297k4xz9rd2SHtzUUWHs
Z3ccSUBrC+Lk/DGsINx1AvoCIQCy5Ji/+KYfJnBMSuULez6gOTCF4SjOUASaaRZqDeg3vjAnBgkr
BgEEAYI3FQoEGjAYMAoGCCsGAQUFBwMCMAoGCCsGAQUFBwMBMDwGCSsGAQQBgjcVBwQvMC0GJSsG
AQQBgjcVCIe91xuB5+tGgoGdLo7QDIfw2h1dgoTlaYLzpz4CAWQCASMwga4GCCsGAQUFBwEBBIGh
MIGeMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01p
Y3Jvc29mdCUyMEF6dXJlJTIwVExTJTIwSXNzdWluZyUyMENBJTIwMDYlMjAtJTIweHNpZ24uY3J0
MC0GCCsGAQUFBzABhiFodHRwOi8vb25lb2NzcC5taWNyb3NvZnQuY29tL29jc3AwHQYDVR0OBBYE
FD/NOl8gJlgWNVFbht67ZFD1P8nTMA4GA1UdDwEB/wQEAwIEsDCCCzYGA1UdEQSCCy0wggspgg1t
aWNyb3NvZnQuY29tgg9zLm1pY3Jvc29mdC5jb22CEGdhLm1pY3Jvc29mdC5jb22CEG1pLm1pY3Jv
c29mdC5jb22CEWFlcC5taWNyb3NvZnQuY29tghFhZXIubWljcm9zb2Z0LmNvbYIRZ3J2Lm1pY3Jv
c29mdC5jb22CEWh1cC5taWNyb3NvZnQuY29tghFtYWMubWljcm9zb2Z0LmNvbYIRbWtiLm1pY3Jv
c29mdC5jb22CEXBtZS5taWNyb3NvZnQuY29tghFwbWkubWljcm9zb2Z0LmNvbYIRcnNzLm1pY3Jv
c29mdC5jb22CEXNhci5taWNyb3NvZnQuY29tghF0Y28ubWljcm9zb2Z0LmNvbYISZnVzZS5taWNy
b3NvZnQuY29tghJpZWFrLm1pY3Jvc29mdC5jb22CEm1hYzIubWljcm9zb2Z0LmNvbYISbWNzcC5t
aWNyb3NvZnQuY29tghJvcGVuLm1pY3Jvc29mdC5jb22CEnNob3AubWljcm9zb2Z0LmNvbYISc3B1
ci5taWNyb3NvZnQuY29tghNidWlsZC5taWNyb3NvZnQuY29tghNpdHByby5taWNyb3NvZnQuY29t
ghNtYW5nby5taWNyb3NvZnQuY29tghNtdXNpYy5taWNyb3NvZnQuY29tghNweW1lcy5taWNyb3Nv
ZnQuY29tghNzdG9yZS5taWNyb3NvZnQuY29tghRhZXRoZXIubWljcm9zb2Z0LmNvbYIUYWxlcnRz
Lm1pY3Jvc29mdC5jb22CFGRlc2lnbi5taWNyb3NvZnQuY29tghRnYXJhZ2UubWljcm9zb2Z0LmNv
bYIUZ2lnamFtLm1pY3Jvc29mdC5jb22CFGlnbml0ZS5taWNyb3NvZnQuY29tghRtc2N0ZWMubWlj
cm9zb2Z0LmNvbYIUb25saW5lLm1pY3Jvc29mdC5jb22CFHN0cmVhbS5taWNyb3NvZnQuY29tghVh
ZmZsaW5rLm1pY3Jvc29mdC5jb22CFWNvbm5lY3QubWljcm9zb2Z0LmNvbYIVZGV2ZWxvcC5taWNy
b3NvZnQuY29tghVkb21haW5zLm1pY3Jvc29mdC5jb22CFWV4YW1wbGUubWljcm9zb2Z0LmNvbYIV
bWFkZWlyYS5taWNyb3NvZnQuY29tghVtc2RuaXN2Lm1pY3Jvc29mdC5jb22CFW1zcHJlc3MubWlj
cm9zb2Z0LmNvbYIVcXVhbnR1bS5taWNyb3NvZnQuY29tghVzcG9uc29yLm1pY3Jvc29mdC5jb22C
FXd3dy5hZXAubWljcm9zb2Z0LmNvbYIVd3d3LmFlci5taWNyb3NvZnQuY29tghV3d3diZXRhLm1p
Y3Jvc29mdC5jb22CFmJ1c2luZXNzLm1pY3Jvc29mdC5jb22CFmVtcHJlc2FzLm1pY3Jvc29mdC5j
b22CFmxlYXJuaW5nLm1pY3Jvc29mdC5jb22CFm1zZG53aWtpLm1pY3Jvc29mdC5jb22CFm9wZW5u
ZXNzLm1pY3Jvc29mdC5jb22CFnBpbnBvaW50Lm1pY3Jvc29mdC5jb22CFnNuYWNrYm94Lm1pY3Jv
c29mdC5jb22CFnNwb25zb3JzLm1pY3Jvc29mdC5jb22CFnN0YXRpb25xLm1pY3Jvc29mdC5jb22C
F2Fpc3Rvcmllcy5taWNyb3NvZnQuY29tghdjb21tdW5pdHkubWljcm9zb2Z0LmNvbYIXY3Jhd2xt
c2RuLm1pY3Jvc29mdC5jb22CF2lvdHNjaG9vbC5taWNyb3NvZnQuY29tghdtZXNzZW5nZXIubWlj
cm9zb2Z0LmNvbYIXbWluZWNyYWZ0Lm1pY3Jvc29mdC5jb22CGGJhY2tvZmZpY2UubWljcm9zb2Z0
LmNvbYIYZW50ZXJwcmlzZS5taWNyb3NvZnQuY29tghhpb3RjZW50cmFsLm1pY3Jvc29mdC5jb22C
GHBpbnVuYmxvY2subWljcm9zb2Z0LmNvbYIYcmVyb3V0ZTQ0My5taWNyb3NvZnQuY29tghljb21t
dW5pdGllcy5taWNyb3NvZnQuY29tghlleHBsb3JlLXNtYi5taWNyb3NvZnQuY29tghlleHByZXNz
aW9ucy5taWNyb3NvZnQuY29tghlvbmRlcm5lbWVycy5taWNyb3NvZnQuY29tghl0ZWNoYWNhZGVt
eS5taWNyb3NvZnQuY29tghl0ZXJyYXNlcnZlci5taWNyb3NvZnQuY29tghpjb21tdW5pdGllczIu
bWljcm9zb2Z0LmNvbYIaY29ubmVjdGV2ZW50Lm1pY3Jvc29mdC5jb22CGmRhdGFwbGF0Zm9ybS5t
aWNyb3NvZnQuY29tghplbnRyZXByZW5ldXIubWljcm9zb2Z0LmNvbYIaaHhkLnJlc2VhcmNoLm1p
Y3Jvc29mdC5jb22CGm1zcGFydG5lcmlyYS5taWNyb3NvZnQuY29tghpteWRhdGFoZWFsdGgubWlj
cm9zb2Z0LmNvbYIab2VtY29tbXVuaXR5Lm1pY3Jvc29mdC5jb22CGnJlYWwtc3Rvcmllcy5taWNy
b3NvZnQuY29tghp3d3cuZm9ybXNwcm8ubWljcm9zb2Z0LmNvbYIbZnV0dXJlZGVjb2RlZC5taWNy
b3NvZnQuY29tght1cGdyYWRlY2VudGVyLm1pY3Jvc29mdC5jb22CHGxlYXJuYW5hbHl0aWNzLm1p
Y3Jvc29mdC5jb22CHG9ubGluZWxlYXJuaW5nLm1pY3Jvc29mdC5jb22CHWJ1c2luZXNzY2VudHJh
bC5taWNyb3NvZnQuY29tgh1jbG91ZC1pbW1lcnNpb24ubWljcm9zb2Z0LmNvbYIdc3R1ZGVudHBh
cnRuZXJzLm1pY3Jvc29mdC5jb22CHmFuYWx5dGljc3BhcnRuZXIubWljcm9zb2Z0LmNvbYIeYnVz
aW5lc3NwbGF0Zm9ybS5taWNyb3NvZnQuY29tgh5leHBsb3JlLXNlY3VyaXR5Lm1pY3Jvc29mdC5j
b22CHmtsZWludW50ZXJuZWhtZW4ubWljcm9zb2Z0LmNvbYIecGFydG5lcmNvbW11bml0eS5taWNy
b3NvZnQuY29tgh9leHBsb3JlLW1hcmtldGluZy5taWNyb3NvZnQuY29tgh9pbm5vdmF0aW9uY29u
dGVzdC5taWNyb3NvZnQuY29tgh9wYXJ0bmVyaW5jZW50aXZlcy5taWNyb3NvZnQuY29tgh9waG9l
bml4Y2F0YWxvZ3VhdC5taWNyb3NvZnQuY29tgh9zemtvbHlwcnp5c3psb3NjaS5taWNyb3NvZnQu
Y29tgh93d3cucG93ZXJhdXRvbWF0ZS5taWNyb3NvZnQuY29tgiBzdWNjZXNzaW9ucGxhbm5pbmcu
bWljcm9zb2Z0LmNvbYIibHVtaWFjb252ZXJzYXRpb25zdWsubWljcm9zb2Z0LmNvbYIjc3VjY2Vz
c2lvbnBsYW5uaW5ndWF0Lm1pY3Jvc29mdC5jb22CJGJ1c2luZXNzbW9iaWxpdHljZW50ZXIubWlj
cm9zb2Z0LmNvbYIlc2t5cGVhbmR0ZWFtcy5mYXN0dHJhY2subWljcm9zb2Z0LmNvbYInd3d3Lm1p
Y3Jvc29mdGRsYXBhcnRuZXJvdy5taWNyb3NvZnQuY29tgihjb21tZXJjaWFsYXBwY2VydGlmaWNh
dGlvbi5taWNyb3NvZnQuY29tgil3d3cuc2t5cGVhbmR0ZWFtcy5mYXN0dHJhY2subWljcm9zb2Z0
LmNvbTBkBgNVHR8EXTBbMFmgV6BVhlNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
bC9NaWNyb3NvZnQlMjBBenVyZSUyMFRMUyUyMElzc3VpbmclMjBDQSUyMDA2LmNybDBmBgNVHSAE
XzBdMFEGDCsGAQQBgjdMg30BATBBMD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5j
b20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0wCAYGZ4EMAQICMB8GA1UdIwQYMBaAFNXBZzrC
o530d1JbWRI4KeZVaLulMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATANBgkqhkiG9w0B
AQwFAAOCAgEAcTl61hx6IV10gzl4WWIZdviTTqApZ0XGMCq4ed/X2BJF+8TwiLTMZlSw7+TgnHlp
3riAN9HS+4aW1kq0E3wCNGfpGHWzbtxACfjRw5/qgxJLp4Zz+4RQZa04NOsCwkF8Hjmud5lxn+xW
K5P+R1WVOX9+XxaJ+x18CgLkj4KXmjJvC+J2cZOdTAEWOm92eTIoDYwu+3asJe64Djf9KPXI8nTb
v8zFgI0c+fbU0IguIeoW4pv5qKEJ0UBHjQ1wj67mqHIKQW4cH3SBV2imA5H28jiIgKvWgWfO5sGD
bxhyWdSkEhuiLjKJMLwFh/s2V8JsoyKepBjfrcsj46Cd6nbJnd+EBb63G79Fv+8xFcImy31iCaaU
iQ4AdxaUT5JZAyin2ymF2WD9Vq1jVj4FGlx58veVIsJNcyq7l9pLlbNSbMtnaHMjLjIBJQ1KVZSP
rKbzTgoY2Ne07lDXT1g3M+U5Q+oehlEDAv/17I0M3kGGJqgvA9AudjK1Zi7OkAtHFxVMHG+pi0A8
PEIP0Ew/bU6b6/+SbEYDjncMA0VWGHCet9w2Dm5LAOkq1w2c0SXhMOxLioq1Oc26sGK1K7dFrf3Q
dOFdQnQl8+zvT/evzMjOOS+aMIYw2nRwQzKbuD1+NyZ9b9XkQ2U8oqNKfKafURi3nB9wx6vzoPJe
WnXl4/UBvnQ=
-----END CERTIFICATE-----
Connect to www.microsoft.com on port 443 and store the returned certificate, then convert it to PEM format (which can be saved to file if needed).
#>
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment