问题:通过http协议,客户端 传明文 给服务端,有安全问题
解决思路:既能够透明地处理数据,且无须操心网络传输过程中的安全问题
解决方案:SSL作为一种安全协议,它在传输层提供对网络连接加密的功能。对于应用层而言,它是透明的,数据在传递到应用层之前就已经完成了加密和解密的过程。标准化后称为TLS
TLS/SSL是一个公钥/私钥的结构,它是一个非对称的结构,每个服务器端和客户端都有自己的公私钥。公钥用来加密要传输的数据,私钥用来解密接收到的数据。公钥和私钥是配对的,通过公钥加密的数据,只有通过私钥才能解密,所以在建立安全传输之前,客户端和服务器端之间需要互换公钥。客户端发送数据时要通过服务器端的公钥进行加密,服务器端发送数据时则需要客户端的公钥进行加密,如此才能完成加密解密的过程,
还会产生问题:网络中可能存在窃听的情况
中间人攻击:客户端和服务器端在交换公钥的过程中,中间人对客户端扮演服务器端的角色,对服务器端扮演客户端的角色
解决办法(数字证书):
1、数据传输过程中需要对得到的公钥进行认证,以确认得到的公钥是出自目标服务器。
2、TLS/SSL引入了数字证书来进行认证
3、CA(Certificate Authority,数字证书认证中心)。CA的作用是为站点颁发证书,且这个证书中具有CA通过自己的公钥和私钥实现的签名。
4、为了得到签名证书,服务器端需要通过自己的私钥生成CSR(Certificate Signing Request,证书签名请求)文件。CA机构将通过这个文件颁发属于该服务器端的签名证书,只要通过CA机构就能验证证书是否合法。
5、通过CA机构颁发证书通常是一个烦琐的过程,需要付出一定的精力和费用。对于中小型企业而言,多半是采用自签名证书来构建安全网络的。所谓自签名证书,就是自己扮演CA机构,给自己的服务器端颁发签名证书。
以下为生成私钥、生成CSR文件、通过私钥自签名生成证书的过程:
$ openssl genrsa -out ca.key 1024
$ openssl req -new -key ca.key -out ca.csr
$ openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt
完成了扮演CA角色需要的文件后
回到服务器端,服务器端需要向CA机构申请签名证书。在申请签名证书之前依然是要创建自己的CSR文件。得到CSR文件后,向我们自己的CA机构申请签名。签名过程需要CA的证书和私钥参与,最终颁发一个带有CA签名的证书。
$ openssl req -new -key server.key -out server.csr
$ openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt"
“6、客户端在发起安全连接前会去获取服务器端的证书,并通过CA的证书验证服务器端证书的真伪。除了验证真伪外,通常还含有对服务器名称、IP地址等进行验证的过程。
7、如果是知名的CA机构,它们的证书一般预装在浏览器中。如果是自己扮演CA机构,颁发自有签名证书则不能享受这个福利,客户端需要获取到CA的证书才能进行验证
8、签名证书是一环一环地颁发的,但是在CA那里的证书是不需要上级证书参与签名的,这个证书我们通常称为根证书。”