在网络中,数据在服务器端与客户端之间传递,为了保证数据安全,需要将数据进行加密后再传输,这样即使数据被窃取,窃听者也无法知道数据的真实内容。
当前的网络服务中,使用TLS来加密。应用层在TLS之上,使得在数据传到应用层之前就已经完成了加密和解密的过程。
- 相关概念:
SSL(secure sockets layer):安全套接字
TLS(transport layer security):安全传输层协议
CA(certificate authority):认证中心:
CSR(certificate signing request):签名证书请求文件-用于向CA申请数字签名
2、Openssl,一个开源项目,作为一个多用途的命令行工具,包括如下命令:
enc:对称加密
dgst:单向加密
passwd:生成密码
rand:生成随机数
genrsa:生成私钥
rsa:提取公钥(从生成的私钥中提取)
x509:自签证书
req:CSR证书请求文件生成(通过私钥文件生成)
3、证书生成过程(以自签名证书为例)
(1)生成流程:
CA机构:(1)生成私钥(2)用私钥生成csr文件(3)生成自签名证书
服务器:(2)生成私钥(2)生成csr文件(3)用CA的相关信息生成签名证书
(2)req命令参数说明:
-new 生成一个新的证书请求文件
-key:指定已有的秘钥文件生成秘钥请求,与-new配合
-out:指定输出文件,为证书请求文件
-newkkey:与-key互斥,生成证书请求文件时自动生成秘钥,其名称由-keyout指定
-nodes :如果指定-newkey自动生成秘钥,那么-nodes选项说明生成的秘钥不需要加密
-x509:创建一个证书文件
(3)x509命令参数
-signkey:指定签名秘钥(须为私钥),并使得由-in 提供的输入文件转成自签名的证书
-req :输入是一个证书请求,签名并输出
4、具体命令
生成 CA 私钥:openssl genrsa -out ca.key 1024,其中,1024表示私钥位数
生成 CA 证书签名文件:openssl req -new -key ca.key -out ca.csr
生成 CA 根证书(公钥):openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt
【直接生成 CA 根证书(公钥),相当于上面两条命令一起执行了】:
openssl req -new -x509 -key ca.key -out ca.crt
制作生成网站的证书并用CA 签名认证
生成证书私钥:openssl genrsa -out server.pem
制作解密后的证书私钥:openssl rsa -in server.pem -out server.key
生成签名请求文件:openssl req -new -key server.pem -out server.csr
用CA 进行签名,制作证书:openssl x509 -req -ca ca.crt -CAkey ca.key -in server.csr -out server.crt
5、Nginx配置
监听443端口,并配置ssl_certificate_key 和 ssl_certificate
具体配置示例:
server{
listen 443;
ssl on;
ssl_certificate_key server.key;
ssl_certificate server.crt;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
}
配置完成后,重新启动Nginx,就可以用https访问了。(注意location的配置,能正常访问就行)