Primero, no se "encripta con un certificado". Cifras con un protocolo que puede o no usar certificados para la distribución de claves públicas. El protocolo más utilizado para proteger los canales de datos bidireccionales es SSL (ahora conocido como TLS). En SSL, hay un cliente y un servidor , que no necesariamente corresponden al "cliente" y al "servidor" en el nivel de TCP: el "cliente" de SSL es el uno que comienza el protocolo de enlace SSL, es decir, que envía el mensaje ClientHello
.
En SSL, el servidor normalmente muestra su clave pública como parte de un certificado. El cliente valida el certificado del servidor (comprueba que está emitido por una CA de confianza) y verifica que el certificado contiene el nombre del servidor deseado. Esto significa que el cliente tiene alguna garantía de que está hablando con el servidor correcto. Por otro lado, el servidor no sabe quién es el cliente; El servidor solo tiene la garantía de que está hablando con el mismo cliente durante toda la conexión.
Si el servidor debe saber con quién está hablando, entonces debe aplicarse algún tipo de autenticación de cliente. SSL admite certificados de cliente para eso. Otro método, muy a menudo empleado en un contexto web, es hacer que el cliente muestre algunas credenciales (un nombre de usuario y una contraseña) dentro de el túnel SSL (ya que el cliente tiene alguna garantía de que habla a la derecha) servidor, entonces puede enviar la contraseña al servidor sin temor a que un atacante la intercepte).
SSL también admite algunas conexiones sin certificado, por ejemplo, las suites de cifrado PSK , en las que el cliente y el servidor se autentican entre sí con respecto a un valor secreto compartido; Si, en su situación, puede hacer que el cliente y el servidor conozcan una clave secreta común, esto evitará todo el negocio de certificados. Si el secreto compartido es un valor de baja entropía (por ejemplo, es una "contraseña" que un usuario humano podrá recordar y aceptará escribir de vez en cuando), entonces Los conjuntos de cifrado RSP son el camino a seguir. Sin embargo, la compatibilidad con PSK o SRP en .NET puede requerir algunas bibliotecas adicionales (por ejemplo, enlaces de OpenSSL para .NET ).