El primer paso es crear un certificado https://www.jesusninoc.com/02/25/crear-y-exportar-un-certificado-en-formato-pfx-desde-powershell/
Servidor
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# Establecer los parámetros del servidor $port = 4445 $certFilePath = "Certificado.pfx" $certPassword = "TuContraseña" # Cargar el certificado del servidor $cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($certFilePath, $certPassword) # Crear el listener TCP para el servidor $listener = [System.Net.Sockets.TcpListener]::new([System.Net.IPAddress]::Any, $port) $listener.Start() Write-Host "Servidor escuchando en el puerto $port..." # Esperar a que lleguen conexiones entrantes $client = $listener.AcceptTcpClient() Write-Host "Conexión entrante aceptada de $($client.Client.RemoteEndPoint)" # Crear el flujo SSLStream a través del cliente $sslStream = [System.Net.Security.SslStream]::new($client.GetStream()) # Autenticar al cliente utilizando el certificado del servidor $sslStream.AuthenticateAsServer($cert, $false, [System.Security.Authentication.SslProtocols]::Tls12, $false) # Enviar datos al cliente $message = "Hola cliente, soy el servidor" $buffer = [System.Text.Encoding]::UTF8.GetBytes($message) $sslStream.Write($buffer, 0, $buffer.Length) Write-Host "Datos enviados al cliente: $message" # Cerrar la conexión SSL $sslStream.Close() $client.Close() $listener.Stop() |
Cliente
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
$Certificate = $null $TcpClient = New-Object -TypeName System.Net.Sockets.TcpClient $TcpClient.Connect("127.0.0.1", "4445") $TcpStream = $TcpClient.GetStream() $SslStream = New-Object System.Net.Security.SslStream $TcpStream, $false, ({$True} -as [Net.Security.RemoteCertificateValidationCallback]) $cert = dir cert:\CurrentUser\My | where {$_.Subject -like "*jesusninoc*"} $computerName = "localhost" $port = "4445" [System.Security.Authentication.SslProtocols]$protocol = "Tls12" $certcol = New-object System.Security.Cryptography.X509Certificates.X509CertificateCollection $certcol.Add($cert) $socket = New-Object Net.Sockets.TcpClient($computerName, $port) $stream = $socket.GetStream() $sslStream.AuthenticateAsClient($computerName,$certcol,$protocol,$false) $mensaje = New-Object System.IO.StreamReader $SslStream $mensaje.ReadLine() |