扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
服务器监听。客户连接到服务器后,死循环里READ并处理 那个连接,不要断开,同时可以发送信息. 服务器里 做处理信息. 这东西如果你从SOCKET开始做很复杂。你不但要了解套接字网络连接方法,还要了解套接字阻塞机制,还有读写阻塞机制.还要处理读写超时处理,防DDOS攻击处理,还要了解异步处理SELECT或POLL。而且这种底层的程序用C#做很不值得,。.如果你想从底层做,并且做的很好.就用C写,并且要求效率。 如果不要求高效率那就直接用IIS做成WEB服务,配合数据库做,然后用客户端调用WEB服务..
阳江网站建设公司创新互联公司,阳江网站设计制作,有大型网站制作公司丰富经验。已为阳江上千提供企业网站建设服务。企业网站搭建\外贸网站制作要多少钱,请找那个售后服务好的阳江做网站的公司定做!
SSL安全套接层(Secure Socket Layer) 为Netspace所研发,用以保证在Internet上数据传输的完整性和保密性,目前版本为3.0,最新版本为TLS1.2安全传输层协议(Transport Layer Security)。TLS和SSL两者差别极小可以将其理解为SSL的更新版本。
SSL介于应用层和网络层之间,位于传输层 。应用的数据经过传输层中的SSL进行加密,并增加自己的SSL头,在将加密后的数据传向网络层。
通过openssl可以自行签发证书,有了证书和私钥后就可以进行SSL安全通信了。
调用SSL提供的接口流程如下图所示:
从上述通讯过程可以看出,在ssl通讯建立起来之后,不考虑ssl版本上的一些漏洞,通信过程是很安全的,可以有效的防止中间人攻击和运营商劫持等问题,通讯数据的保密性和完整性得到了有效保证。所以针对SSL的相关攻击必须建立在其会话的初始化阶段,例如进行中间人攻击必须在会话建立过程中实现,即在通讯过程中攻击者伪造一个证书,对客户端声称该证书就是服务器证书来骗过客户端,使其信任该证书,并使用该证书来进行通讯,这样用户通讯的信息就会被第三监听,通讯保密性和完整性就被破坏。这种攻击方式也有一定的局限,当使用伪造的证书来建立通讯时,一般攻击者不会获得经过官方机构认证的证书,客户端的浏览器就会发过警告,提醒通信不安全,可以参考访问12306时的浏览器的提示(因为12306使用的是其自建的ca颁发的证书,没有经过官方机构的认证,所以浏览器就默认会认为其证书不安全,并提出告警)。
尽管通过浏览器去检验证书的合法性会提高攻击的成本,但在某些特殊情况下,还是会绕过浏览器的校验。例如:当我们使用fiddler和Charles这一类的抓包工具时,可以手动将他们的证书添加成为可信证书,所以当我们利用这些工具在本地对相关的系统进行逻辑分析时,并不会收到浏览器的告警。而且浏览器的校验仅仅针对的是web端的应用,对于移动端和其他非web端的应用只能通过其他方式来进行防护,一种比较通用的实现方式是使用SSL Pinning即证书绑定。
握手协议是客户端和服务器用于与SSL连接通信的第一个子协议。握手协议包括客户端和服务器之间的一系列消息。SSL中最复杂的协议是握手协议。该协议允许服务器和客户端相互进行身份验证,协商加密和MAC算法,以及保密SSL密钥以保护SSL记录中发送的数据。在应用程序的数据传输之前使用握手协议。
在客户端和服务器握手成功之后使用记录协议,即客户端和服务器相互认证并确定安全信息交换使用的算法,并输入SSL记录协议,该协议为SSL提供两种服务连接:
客户机和服务器发现错误时,向对方发送一个警报消息。如果是致命错误,则算法立即关闭SSL连接,双方还会先删除相关的会话号,秘密和密钥。每个警报消息共2个字节,第1个字节表示错误类型,如果是警报,则值为1,如果是致命错误,则值为2;第2个字节制定实际错误类型。
TLS其实是SSL,可能更正式的说法已经不用SSL了。TLS是一套基于非对称加密算法的安全传输协议,更严格来说,TLS先是通过非对称加密方式交换对称加密秘钥,然后采用对称加密算法进行安全传输。
非对称加密是这样的一把锁,有两把钥匙,任意一把钥匙可以把锁锁上,只有另一把钥匙才能将锁打开。这两把钥匙是成对的,可以互相解密。其中一把是公开的公钥,另一把是服务器持有的私钥。
任何人都可以用公钥加密一段消息发送给服务器,做到安全发送。另一方面,服务器可以用私钥加密一段消息,将消息明文和密文发送给接收者,以此证明自己的真实身份,这叫做签名。当然,现实中,是对消息的摘要进行签名加密,因为摘要比较小。
TLS的第一步,就是让发送者持有服务器的公钥。通常获得服务器公钥的方式,都是向服务器进行询问,然后由服务器明文发送过来的。为了保证这一步的安全性,确保明文发送过来的公钥没有被串改,我们又发明了证书。
证书由服务器名称信息和服务器公钥组成,然后加上证书签发机构CA和签发机构对前面信息的签名。改用证书机制后,服务器以明文发送自己的证书信息,使用者用CA的公钥验证证书签名,核对相关的服务器信息,然后就可以信任服务器的公钥了。
至于CA公钥的传递方式,一般是内置的或者通过实体进行传递。
一般服务器是不限制使用者访问的,所以服务器配置了证书和私钥,让发送者能够安全的从第一步开始建立加密通信机制。即使使用者不验证服务器证书,TLS仍旧是以加密方式进行,虽然安全度不是最高,但是屏蔽掉无聊的阿猫阿狗访问已经足够了。
更进一步,服务器可以配置双向认证,配置CA证书并要求认证使用者的证书。那么使用者在访问前就要配置由CA签发的个人证书和私钥,在第一步开始时把自己的证书和随机签名发过去让服务器进行认证。
使用双向认证的时候,通信的安全性已经足够高了:消息是加密的,并且不太容易在某个环节被串改,而使用者必须经过服务器用自己的CA签发授权证书后才能访问服务。
TLS的运用其实应该非常广,只要不是内网服务,而是向不安全的互联网公开的服务,并且在通信上没有使用任何加密手段,也没有特别有效的客户鉴权,都应该使用TLS。
比如有时候因为某种原因,不得不向互联网暴露mysql,redis或者其他开源软件的服务端口,这种大作死的行为,软件自带的脆弱的客户鉴权机制就跟杂草一样一踩就倒,已经是业界人尽皆知的情形。
如果能为这些开放的服务端口加上TLS双向认证通信,基本能把侵害排除99%了吧。那如何给这些服务增加TLS安全通信呢?
首先, 把公开的服务改成内网服务 。
第二, 在服务器和客户端之间配置TLS tunnel ,通过tunnel转发客户端和服务器之间流量。有很多TLS tunnel客户端可以使用,这种方式也不会对原系统造成任何改动,所谓各司其职。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流