利用Let‘s Encrypt为Nginx服务器颁发SSL证书实现https

在这里插入图片描述

环境说明:

  • OS : Centos 8
  • Nginx版本:v1.20.1

1. 安装Nginx

  • 首先卸载系统原有的nginx
    dnf -y remove nginx
    然后再用:
    rpm -qa|grep nginx
    列出与nginx相关的依赖关系,利用: rpm -e 包名,一个一个删除干净。
    
  • 开始安装:
    dnf -y install wget tar
    groupadd www
    useradd -g www www
    wget https://nginx.org/download/nginx-1.20.1.tar.gz
    tar -zxvf nginx-1.20.1.tar.gz
    cd nginx-1.20.1
    
    以下是一条长命令,务必一次性完整复制粘贴:
    ./configure --user=www \
    --group=www \
    --prefix=/usr/local/nginx \
    --with-http_stub_status_module \
    --with-http_ssl_module \
    --with-http_v2_module \
    
    编译及安装:
    make && make install
    
  • 设置自启动:
    编辑文档:nano /usr/lib/systemd/system/nginx.service
    [Unit]
    Description=nginx
    After=network.target
    
    [Service]
    Type=forking
    ExecStart=/usr/local/nginx/sbin/nginx
    ExecReload=/usr/local/nginx/sbin/nginx -s reload
    ExecStop=/usr/local/nginx/sbin/nginx -s quit
    PrivateTmp=true
     
    [Install]
    WantedBy=multi-user.target
    
    存盘退出,输入:
    systemctl start nginx
    systemctl enable nginx
  • 关闭防火墙:
     systemctl stop firewalld
     systemctl disable firewalld
     systemctl mask firewalld
     nft flush ruleset
    
  • 打开浏览器,输入: http://mysite.com (mysite.com改成你自己的域名或IP)
    如果出现Nginx的欢迎界面,说明安装成功!

2. 利用Let’s Encrypt 生成证书

  • 安装 snapd 及 certbot

    dnf install snapd
    systemctl enable --now snapd.socket
    ln -s /var/lib/snapd/snap /snap
    snap refresh core
    snap install core
    dnf remove certbot
    snap install --classic certbot
    ln -s /snap/bin/certbot /usr/bin/certbot
    
  • 生成证书

    注意:在生成证书前,请务必将您的域名指向本机IP并生效(ping域名能正确显示本机IP)

    准备妥当后,输入(注意这也是一条长命令):

    certbot certonly  --nginx \
    --nginx-server-root /usr/local/nginx/conf/ \
    --nginx-ctl /usr/local/nginx/sbin/nginx
    

    题外话:certbot会自动寻找系统的nginx路径,但如果是编译安装的话,则必须手动指定,否则会报错。如果nginx是通过 dnf 默认安装的话,这一步更简单一些,只需要:
    certbot certonly --nginx
    (无需指定 --nginx-server-root 和 --nginx-ctl 路径)

    这一步会询问你几个简单的问题,比如邮件地址和域名等,这里就不赘述了,完成后,将会显示:

    Please enter the domain name(s) you would like on your certificate (comma and/or
    space separated) (Enter ‘c’ to cancel): mysite.com
    Requesting a certificate for mysite.com

    Successfully received certificate.
    Certificate is saved at: /etc/letsencrypt/live/mysite.com/fullchain.pem
    Key is saved at: /etc/letsencrypt/live/mysite.com/privkey.pem
    This certificate expires on 2022-01-28.
    These files will be updated when the certificate renews.
    Certbot has set up a scheduled task to automatically renew this certificate in the background.

    如上所述,证书保存在 /etc/letsencrypt/live/mysite.com 这个路径里,有两个:
    fullchain.pem 相当于公钥,privkey.pem 为私钥。
    至此,证书生成完毕。


3. 将证书引入nginx并生效

  • 编辑文档: nano /usr/local/nginx/conf/nginx.conf
    插入一个server段,位置与传统http(80端口)平级,为了避免出错,请先找到这一段:

    	server {
              listen       80;
    

    然后在 server { 的上一行,插入:

    server {
          
          
            listen       443 ssl;
            server_name  mysite.com;
            # 证书路径:
            ssl_certificate      /etc/letsencrypt/live/mysite.com/fullchain.pem;
            ssl_certificate_key  /etc/letsencrypt/live/mysite.com/privkey.pem;
    
            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.php index.html index.htm;
            }
    }
    

    存盘退出,输入: systemctl restart nginx 让设置生效。

    这一步主要是注意证书的路径,其他没有什么太复杂的内容。

    现在,输入:https://mysite.com (注意:跟前面不同的是,URL变成了https)
    如果正常返回nginx欢迎界面的话,说明证书安装成功!

    如果用Chrome打开的话,在网址左边有一把锁型Logo,打开它,然后会看到一句话:
    连接是安全的 点进去,可以看到证书的详细信息,颁发机构为:Let’s Encrypt
    在这里插入图片描述


附加内容:网页版证书生成

  • 上面的例子是利用Let’s Encrypt 特殊的程序 certbot 来实现验证的,所谓的验证,指的是你确实有这个域名的控制权,certbot 会分析你输入的域名以及对应主机IP的关系,决定是否颁发证书给你,否则所谓证书将变得毫无意义(不信你在证书生成的时候输入google.com 或者 qq.com 试试看 :)
  • 那么问题来了,certbot是一个命令行程序,我们必须至少拥有命令行权限才能执行,如果碰到那些不提供SSH登录的虚拟网页空间或者因客观原因无法登录主机时,那就比较头疼了。
  • 针对这一类情况,还有很多免费证书颁发机构可以在他们的网页上申请证书:
    比如:
    1、https://zerossl.com/
    2、https://www.sslforfree.com/
    3、https://www.cloudflare.com/ssl/
    4、https://www.ssl.com/zh-CN/certificates/free/
    以上这些机构都提供免费证书,不需要登录主机,但是他们会要求你在域名DNS设置中添加一个TXT字段,或者在主机网页空间中上传一个指定的文本文件等,以此证明你确实有该域名的控制权。方式大同小异,操作起来也很简单,在此就不赘述了,总而言之,不管用什么方法生成的证书,必然会发给你两个文件,一个是所谓的公钥(以pem或者crt为后缀),另一个文件是私钥(以key或者private为后缀),将这两个文件保存在指定位置,然后修改nginx.conf文件,指向它们即可,这和本文上述的套路一模一样。

结语

  • https 是大势所趋,请尽快升级你的网站吧,愿本文能对你有所帮助。

猜你喜欢

转载自blog.csdn.net/rockage/article/details/121059219
今日推荐