Nginx配置SSL证书

时间:2022-07-23
本文章向大家介绍Nginx配置SSL证书,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

首先区别Http与Https

HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。

HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。

配置 HTTPS 要用到私钥 example.key 文件和 example.crt 证书文件

CSR:Cerificate Signing Request,证书签署请求文件,里面包含申请者的 DN(Distinguished Name,标识名)和公钥信息,在第三方证书颁发机构签署证书的时候需要提供。证书颁发机构拿到 CSR 后使用其根证书私钥对证书进行加密并生成 CRT 证书文件,里面包含证书加密信息以及申请者的 DN 及公钥信息

Key:证书申请者私钥文件,和证书里面的公钥配对使用,在 HTTPS 『握手』通讯过程需要使用私钥去解密客戶端发來的经过证书公钥加密的随机数信息,是 HTTPS 加密通讯过程非常重要的文件,在配置 HTTPS 的時候要用到网络中有许多地方可以申请免费的证书,比如:

Let's Encrypt 官网:https://letsencrypt.org

阿里云证书 官网:https://common-buy.aliyun.com/?commodityCode=cas

Freessl 官网:https://freessl.cn/

我是在阿里云上免费申请的

申请证书大概10分钟就可以审核通过,然后就是下载证书,选择nginx

然后把下载下来的两个文件放进nginx的根目录路

然后进入nginx.conf中配置

server {
        listen       443 ssl;
        server_name  ythan.top;
        ssl_certificate      ythan.top.pem;
        ssl_certificate_key  ythan.top.key;
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
        root /www/wordpress;
        location / {
            index  index.php index.html index.htm;
            if (-f $request_filename/index.html){
                     rewrite (.*) $1/index.html break;
                }
            if (-f $request_filename/index.php){
                     rewrite (.*) $1/index.php;
                 }
            if (!-f $request_filename){
                      rewrite (.*) /index.php;
                 }
        }
        rewrite /wp-admin$ $scheme://$host$uri/ permanent;

        location ~ .php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi.conf;
        }


    }

完了之后重启nginx

nginx -s reload

记得打开服务器的443端口号

如果再次进去你的网站是自动下载一个php文件,是因为chrome的缓存导致,这个问题折腾了我好几个小时,然后如果你原网站虽然有证书,但是显示不安全的话就是应为你网站当中存在一些图片来自http中,修改一下图片的来源即可。

没有证书和有证书相比较的效果:

最后一点,把网站强制跳转到https的链接中,在nginx.conf配置文件中加入以下一段代码:

rewrite ^(.*)$ https://$host$1 permanent;