那么首先我们会问,什么是SSL?
SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。
SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等
1)认证用户和服务器,确保数据发送到正确的客户机和服务器;
2)加密数据以防止数据中途被窃取;
3)维护数据的完整性,确保数据在传输过程中不被改变。
1.CA证书,也叫根证书或者中间级证书。如果是单向https认证的话,该证书是可选的。不安装CA证书的话,浏览器默认是不安全的。
2.服务器证书,必选项。通过key,证书请求文件csr,再通过CA证书签名,生成服务器证书。
3.客户端证书,可选项。若有客户端证书则是双向https验证。
linux系统是不以后缀名来判断文件类型的,但是为了我们能够更好地判断文件用途,所以添加各种后缀。以下是约定成俗的后缀。
*.key:密钥文件,一般是SSL中的私钥;
*.csr:证书请求文件,里面包含公钥和其他信息,通过签名后就可以生成证书;
*.crt, *.cert:证书文件,包含公钥,签名和其他需要认证的信息,比如主机名称(IP)等。
*.pem:里面一般包含私钥和证书的信息。
a) 生成服务器私钥
openssl genrsa -des3 -out server.key 1024
输入加密密码,用 128 位 rsa 算法生成密钥,得到 server.key 文件。
b) 生成服务器证书请求( CSR )
openssl req -new -key server.key -out server.csr
CSR( Certificate Signing Request)是一个证书签名请求,在申请证书之前,首先要在服务器上生成 CSR ,并将其提交给 CA 认证中心, CA 才能签发 SSL 服务器证书。也可以认为, CSR 就是一个在服务器上生成的证书。
在生成这个文件的过程中,有一点需要特别注意,Common Name 填入主机名(或者服务器IP)。
c) 自己生成服务器证书
如果不使用 CA 证书签名的话,用如下方式生成:
openssl req -x509 -days 1024 -key server.key -in server.csr > server.crt
用服务器密钥和证书请求生成证书 server.crt , -days 参数指明证书有效期,单位为天。商业上来说,服务器证书是由通过第三方机构颁发的,该证书由第三方认证机构颁发的。
如果使用 CA 证书签名,用 openssl 提供的工具 CA.sh 生成服务器证书:
mv server.csr newreq.pem
./CA.sh -sign
mv newcert.pem server.crt
签名证书后,可通过如下命令可查看服务器证书的内容:
openssl x509 -noout -text -in server.crt
可通过如下命令验证服务器证书:
openssl verify -CAfile ca.crt server.crt
客户证书是可选的。如果有客户证书,就是双向认证 HTTPS ,否则就是单向认证 HTTPS 。
a) 生成客户私钥
openssl genrsa -des3 -out client.key 1024
b) 生成客户证书签名请求
openssl req -new -key client.key -out client.csr
c) 生成客户证书(使用 CA 证书签名)
openssl ca -in client.csr -out client.crt
d) 证书转换成浏览器认识的格式
openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.pfx
1.如果使用双向认证,就会有三个私钥和三个证书。分别是 ca.key, ca.crt, server.key, server.crt, client.key, client.crt ,以及给浏览器的 client.pfx 。
2.如果使用有 CA 证书的单向认证,证书和私钥就是 ca.key, ca.crt, server.key, server.crt 。
3.如果使用无 CA 证书的单向认证,证书和私钥就是 server.key, server.crt 。
最后在fedora作为客户端,wget 1.14通过命令
wget --ca-certificate=server.crt https://+ip+file 成功获取文件,证书验证通过。