使用C#实现SSLSocket加密通讯 Https

原文链接
http://blog.csdn.net/wuyb_2004/article/details/51393290

using System;

using System.Collections;

using System.Net.Security;

using System.Net.Sockets;

using System.Security.Authentication;

using System.Text;

using System.Security.Cryptography.X509Certificates;

namespace Examples.System.Net
{
    public class SslTcpClient
    {
        private static Hashtable certificateErrors = new Hashtable();
        // The following method is invoked by the RemoteCertificateValidationDelegate.
        public static bool ValidateServerCertificate(
              object sender,
              X509Certificate certificate,
              X509Chain chain,
              SslPolicyErrors sslPolicyErrors)
        {
            if (sslPolicyErrors == SslPolicyErrors.None)
                return true;

            Console.WriteLine("Certificate error: {0}", sslPolicyErrors);

            // Do not allow this client to communicate with unauthenticated servers.
            return false;
        }

        public static void RunClient(string machineName)
        {
            // Create a TCP/IP client socket.
            // machineName is the host running the server application.
            TcpClient client = new TcpClient(machineName, 901);
            Console.WriteLine("Client connected.");
            // Create an SSL stream that will close the client‘s stream.
            SslStream sslStream = new SslStream(client.GetStream(), false, new RemoteCertificateValidationCallback(ValidateServerCertificate), null);
            // The server name must match the name on the server certificate.

            X509Store store = new X509Store(StoreName.Root);
            store.Open(OpenFlags.ReadWrite);

            //// 检索证书
            X509Certificate2Collection certs = store.Certificates.Find(X509FindType.FindBySubjectName, "TestClient", false);
            try
            {
                sslStream.AuthenticateAsClient("TestServer", certs, SslProtocols.Tls, false);
            }
            catch (AuthenticationException e)
            {
                Console.WriteLine("Exception: {0}", e.Message);
                if (e.InnerException != null)
                {
                    Console.WriteLine("Inner exception: {0}", e.InnerException.Message);
                }
                Console.WriteLine("Authentication failed - closing the connection.");
                client.Close();
                return;
            }
            // Encode a test message into a byte array.
            // Signal the end of the message using the "<EOF>".
            byte[] messsage = Encoding.UTF8.GetBytes("Hello from the client.<EOF>");
            // Send hello message to the server.
            sslStream.Write(messsage);
            sslStream.Flush();
            // Read message from the server.
            string serverMessage = ReadMessage(sslStream);
            Console.WriteLine("Server says: {0}", serverMessage);

            messsage = Encoding.UTF8.GetBytes("exit");
            sslStream.Write(messsage);
            sslStream.Flush();

            // Close the client connection.
            client.Close();
            Console.WriteLine("Client closed.");
        }

        static string ReadMessage(SslStream sslStream)
        {
            // Read the  message sent by the server.
            // The end of the message is signaled using the
            // "<EOF>" marker.
            byte[] buffer = new byte[2048];
            StringBuilder messageData = new StringBuilder();
            int bytes = -1;
            do
            {
                bytes = sslStream.Read(buffer, 0, buffer.Length);

                // Use Decoder class to convert from bytes to UTF8
                // in case a character spans two buffers.
                Decoder decoder = Encoding.UTF8.GetDecoder();
                char[] chars = new char[decoder.GetCharCount(buffer, 0, bytes)];
                decoder.GetChars(buffer, 0, bytes, chars, 0);
                messageData.Append(chars);
                // Check for EOF.
                if (messageData.ToString().IndexOf("<EOF>") != -1)
                {
                    break;
                }
            } while (bytes != 0);

            return messageData.ToString();
        }

        private static void DisplayUsage()
        {
            Console.WriteLine("To start the client specify:");
            Console.WriteLine("clientSync machineName [serverName]");
            Environment.Exit(1);
        }

        public static void Main(string[] args)
        {
            string machineName = null;
            machineName = "192.168.1.25";
            try
            {
                RunClient(machineName);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            Console.ReadLine();
        }
    }
}
时间: 2024-07-29 08:35:31

使用C#实现SSLSocket加密通讯 Https的相关文章

Apache Httpd 2.2 配置CA证书,实现Https加密通讯

什么是CA证书 关于什么是CA证书,以及如何使用Open-SSL申请和搭建CA证书,我们在之前的文章中已经有过介绍,这里不再赘述.若有疑问,可参考之前的文章.http://www.pojun.tech/blog/2017/09/11/linux-middle-command-1http://xiaoshuaigege.blog.51cto.com/6217242/1965113 http://blog.csdn.net/eumenides_s/article/details/78040787 A

马哥2016全新Linux+Python高端运维班-Linux服务 DNS,httpd,加密通讯,vsftp,NFS,samba服务练习

本周作业内容: 1.详细描述一次加密通讯的过程,结合图示最佳. 一次加密通讯的过程: 首先Bob用单向加密的方法提取数据的特征码,用自己的私钥加密这段特征码,并附加到数据的后面. Bob用对称加密算法把数据及特征码整个进行加密. Bob用接收方的公钥加密对称密钥并附加到数据后面. Alice用私钥解密对称密钥. Alice用对称密钥解密出数据及加密的特征码. Alice用发送方的公钥解密特征码,并用相同的算法算出数据的特征码,比较两个特征码是否一致,若一致即可获得Bob的数据. 如图所示: 单向

Javascript到PHP加密通讯的简单实现

其实内容主要来源于上一篇博文,只是重新组织了语言,并做了原理性的阐述,更容易理解:P ----------------------------------------- 华丽的分割线 ----------------------------------------- 互联网上大多数网站,用户的数据都是以明文形式直接提交到后端CGI,服务器之间的访问也大都是明文传输,这样可被一些别有用心之人通过一些手段监听到.对安全性要求较高的网站,比如银行和大型企业等都会使用HTTPS对通讯过程进行加密等处理.

mariadb实现主从加密通讯的详细步骤

mariadb实现主从加密通讯的详细步骤 1. 实验环境: A. 3台centos7服务器,mariadb版本:5.5.60 B. 服务器角色: a) master节点:192.168.36.121 b) slave节点:192.168.36.120 c) CA服务器:192.168.36.47 2. 具体步骤: A. CA服务器: a) 创建存放证书和私钥的目录 mkdir -p /etc/my.cnf.d/ssl b) 生成CA私钥 cd /etc/my.cnf.d/ssl ( umask

EFK教程(4) - ElasticSearch集群TLS加密通讯

基于TLS实现ElasticSearch集群加密通讯 作者:"发颠的小狼",欢迎转载 目录 ? 用途? ES节点信息? Step1. 关闭服务? Step2. 创建CA证书? Step3. 创建CERT证书? Step4. 创建密钥库? Step5. 删除CA证书? Step6. 修改elasticsearch.yml配置? Step7. 启动服务? 附. 参考文档 用途 前情提要: ? 在第一篇<EFK教程 - 快速入门指南>中,阐述了EFK的安装部署,其中Elastic

运维学习之Apache的配置、访问控制、虚拟主机和加密访问https

apache 一.安装Apache服务 yum install httpd -y systemctl start httpd systemctl stop firewalld systemctl enable httpd systemctl disable firewalld 二.apache信息 1.apache的默认发布文件 index.html 在默认发布文件内写入要展示的内容,在浏览器中输入本机http://172.25.254.126可以看到内容 2.apache的配置文件 /etc/

对称与非对称加密;SSL;HTTPS;AJP

1.对称加密就是加密与解密的时候都是用一个密码 2.非对称加密,有一对密码A,B:用A加密就得用B解密,相对的用B加密就得用A解密 3.公钥与私钥,这一对密码,随便拿一个公布出去,那个就是公钥,剩下一个是私钥. 4.应用1:我想给一个人发信息,我就去拿他公布出来的公钥加密,加密后就只能用私钥来解密,由于私钥在他手中,就能很好在传输中保密. 5.应用2:我收到一个信息,说是银行发来的账单,银行为了不被别人冒牌货发假信息给客户,事先给客户说好,我给你发信息是我的私钥加密了的,所以客户到了信息就要去拿

linux-ssh加密与https安全-9

非对称加密算法:RSA,DSA/DSS 对称加密算法:AES,RC4,3DES HASH算法:MD5,SHA1,SHA256 hash就是找到一种数据内容和数据存放地址之间的映射关系 (1) 文件校验 有奇偶校验和CRC校验,这2种校验并没有抗数据篡改的能力,它们一定程度上能检测并纠正数据传输中的信道误码,但却不能防止对数据的恶意破 MD5 Hash算法的"数字指纹"特性,应用最广泛的一种文件完整性校验和(Checksum)算法,不少Unix系统有提供计算md5 checksum的命令

JavaScript到PHP使用RSA算法进行加密通讯

我们平时做用户登录表单提交,用户名密码都是明文直接POST到后端,这样很容易被别人从监听到. 在js上做rsa,感觉jsencrypt这个是封装的比较好的,但用起来还是遇到了些坑,所以踩进代码里填填坑- 项目在这里 https://github.com/travist/jsencrypt 关于jsencrypt和RSA我就不多介绍了,直接上代码 因为jsencrypt与最新的PHP不兼容所以折腾了好久,在js上做了些改动 可直接下载修改过的js:http://pan.baidu.com/s/1q