1、什么是https?
https超文本传输安全协议是http、ssl安全套接层和tls传输层安全的组合。用于提供加密通信和鉴定网络服务器的身份。网上的支付交易、个人隐私和企业中的敏感信息等越来越受到人们的关注和保护。因此https目前已经是所有注重隐私和安全的网站首选。
要想实现https加密网站,在服务器端首先要获得CA(Certification Authority)认证机构颁发的服务器数字证书(CRT),然后浏览器在发起https请求的时候会验证服务器的CRT是否合法,如不合法就给出一个warning提示信息,若合法,用户在与网站交互的时候,所传输的数据都是加密后的数据,达到了安全可靠的效果。
Nginx服务器中的ngx_http_ssl_module模块用于提供https网站的配置。专业的CA机构颁发的证书是收费的,且需要IP地址和域名。
2、颁发认证证书:
使用Openssl命令实现认证证书的办法功能:
1)生成服务器的RSA私钥
mkdir /usr/local/nginx/conf/ssl
cd /usr/local/nginx/conf/ssl
openssl genrsa -out server.key 2048
命令说明:
1)在conf目录中创建ssl目录;
2)然后使用openssl 生成rsa私钥,genrsa:生成rsa私钥,-out server.key:表示输出的文件名,文件所在的目录为执行当前openssl命令时所在的目录;
3)2048: 密钥长度是2048位。至少是2048位,长度越长,安全性越强。
2)生成服务器的CSR证书请求文件:
CSR证书请求文件是服务器的公钥,用于提交给CA机构进行签名。
说明:
1)程序在生成的过程中需要填写说明:
2)Organizaiton Name: 填写公司名称。
3)Common Name: 必须填写与实际使用https的网站域名吻合。我这边是chang.com 否则会引起浏览器警告。
以上生成的两个文件:
server.key: 是服务器的私钥。
server.csr: 相当于公钥。
利用公钥可以对数据进行加密,加密之后只有私钥才能解密。
私钥用于对数据进行数字签名,签名后的数据可以利用公钥进行验证。
3)CA为服务器认证证书:
openssl x509 -req -days 30 -in server.csr -signkey server.key -out server.crt
说明:
1)使用CA的私钥server.key 为服务器的CSR证书申请文件server.csr 进行签名认证。其中x509是自签名证书格式,days 30 是设置签发证书的有效期为30天。
CA利用私钥签名证书后,该证书将用于浏览器验证请求的网站是否真实,防止网络通信过程中伪造。浏览器保存了受信任的CA机构的公钥,在请求https网站的时候,会利用CA公钥验证服务器的证书,并检查域名是否吻合、证书是否过期、证书是否过期、证书是否已经被吊销等。
3)配置HTTPS网站:
加密通信的时候,浏览器通过网站的证书可以获得服务器的公钥,然后利用公钥加密请求信息,Nginx收到后再利用服务器的私钥解开信息。
浏览器在证书认证后,会在请求信息中包含一个自动生成的高强度密钥,就是随机数。服务器收到利用该密钥加密响应消息。
为了提供效率,在证书认证后的一段时间内是直接利用这个密钥进行对称加密通信。
在Nginx服务器中配置SSL服务,首先需要在编译安装Nginx时添加对ngx_http_ssl_module模块的支持。
ssl on;
ssl_certificate:
ssl_certificate_key:
我们需要平滑重启nginx使配置生效。
修改下宿主机中的hosts文件:
在浏览器中输入:https://www.chang.com
然后选择高级继续前往:
就可以访问到该网站下的文件。