传统的HTTP协议传输的是明文信息,这就致使了必定的安全风险。而HTTPS则解决了这一问题,HTTPS在HTTP协议的基础上增长了SSL/TLS,用于经过证书来验证服务器的身份,而且为客户端和服务器之间的通讯提供加密服务。如今大部分的网站都开始使用HTTPS协议提供服务。html
CA,Certificate Authority,证书颁发机构,负责发放和管理数字证书的权威机构,并作为受信任的第三方,承担公钥体系中公钥的合法性验证。CA制定政策和具体步骤来验证、识别用户身份,并对用户证书进行签名,以确保证书持有者的身份和公钥的拥有权。node
根据使用环境的不一样,SSL证书可分为如下几种:nginx
SSL使用的是公钥私钥体系,因此向CA申请SSL证书前必须先生成一个私钥文件(.key)并使用该私钥签署一个证书签署请求文件(.crs),证书签署请求文件包含申请者的DN(Distinguished Name,标识名)和公钥信息。申请者将该文件提交给CA后,CA会向申请者返回一个证书文件(.crt)。算法
可以使用openssl来生成私钥和证书签署请求文件,命令以下:shell
[root@localhost ~]# openssl req -new -newkey rsa:2048 -sha256 -nodes -out abc.csr -keyout abc.key -subj '/C=CN/ST=fujian/L=fuzhou/O=abc Inc./OU=Web/CN=abc.com'
命令详解:生成一个新的RSA密钥并输出abc.csr和abc.key两个文件。浏览器
命令执行后会在当前目录下生成abc.csr和abc.key两个文件。其中的abc.csr就能够提交给CA以申请SSL证书,CA经过验证后会提供给咱们证书文件。缓存
因为这里的域名abc.com没有进行域名解析,CA是没法验证这个域名的,因此也没法为它颁发证书。为了解决这种状况,咱们可使用openssl本身颁发一张证书,固然,这张证书是没有通过认证的,使用时就会发现问题了。运行如下命令:安全
[root@localhost nginx]# openssl req -new -newkey rsa:2048 -sha256 -nodes -x509 -days 365 -out abc.crt -keyout abc.key -subj '/C=CN/ST=fujian/L=fuzhou/O=abc Inc./OU=Web/CN=abc.com'
此时,当前目录下会生成abc.crt和abc.key两个文件。服务器
Nginx的配置文件中已经有一段关于HTTPS的配置,内容以下:session
# HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #}
详解:
还能够添加如下设置:
这里为这台运行Nginx的主机的www.abc.com配置了HTTPS,并在客户端hosts文件中作了本地解析,而后访问https://www.abc.com:
安装的ESET杀毒软件跳出了安全警告,不信任的证书。
由于SSL证书没有通过CA的认证,因此火狐也阻止了。可是已经出现了证书的验证信息,就说明Nginx的HTTPS配置成功。