阿里域名申请 SSL证书

参考博客1:https://www.jianshu.com/p/e321cc362e5d

参考博客2:https://www.jianshu.com/p/00b0f41274f9

参考博客3:https://blog.51cto.com/12880687/1952059

       本文旨在记录次安装过程中遇到的问题及解决办法,安装过程参考“参考博客1”。前半部分将介绍 Let's Encrypt 的安装与证书获取,后半部分主要记录安装过程中遇到的问题

一、安装及获取Let's Encrypt证书的过程:

环境


  • Ubuntu 16.04
  • Nginx

开始


1. 安装工具

sudo apt-get install letsencrypt

2. 域名配置

将域名 example.com A 记录指向当前服务器的 IP 地址。

3. 获取证书

  • 暂停 Nginx
sudo service nginx stop
  • 执行获取证书命令
sudo letsencrypt certonly --standalone

按提示输入对应的域名走完流程,生成的证书信息将存放在如下目录:

ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

4. 配置 Nginx

server {
  ......

  listen 443 ssl;

  server_name example.com www.example.com;
  ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

  ......
}

5. 重启 Nginx

sudo service nginx start

6. 证书自动更新

证书有效期只有90天,所以需要定期更新证书。

新建文件 certbot-auto-renew-cron,内容如下:

15 2 * */2 * certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start"

执行命令:

crontab certbot-auto-renew-cron

每隔两个月的凌晨 2:15 将执行更新操作。

 二、安装和获取Let's Encrypt证书过程中遇到的问题

问题1:在执行上述“获取证书”步骤的命令 “sudo letsencrypt certonly --standalone” 时,报以下错误:

0 upgraded, 0 newly installed, 0 to remove and 6 not upgraded.

Creating virtual environment...

Traceback (most recent call last):

  File "/usr/lib/python3/dist-packages/virtualenv.py", line 2363, in 

    main()

  File "/usr/lib/python3/dist-packages/virtualenv.py", line 719, in main

    symlink=options.symlink)

  File "/usr/lib/python3/dist-packages/virtualenv.py", line 988, in create_environment

    download=download,

  File "/usr/lib/python3/dist-packages/virtualenv.py", line 918, in install_wheel

    call_subprocess(cmd, show_stdout=False, extra_env=env, stdin=SCRIPT)

  File "/usr/lib/python3/dist-packages/virtualenv.py", line 812, in call_subprocess

    % (cmd_desc, proc.returncode))

OSError: Command /root/.local/share/letsencrypt/bin/python - setuptools pkg_resources pip wheel failed with error code 1

解决办法:卸载重装 virtualenv  

pip uninstall virtualenv
pip install virtualenv

问题2:在执行上述“获取证书”步骤的命令 “sudo letsencrypt certonly --standalone” 时,报以下错误:

Failed authorization procedure. kjfhaifahoa.cn (http-01): urn:ietf:params:acme:error:dns :: DNS problem: NXDOMAIN looking up A for kjfhaifahoa.cn - check that a DNS record exists for this domain

IMPORTANT NOTES:
 - The following errors were reported by the server:

   Domain: kjfhaifahoa.cn
   Type:   None
   Detail: DNS problem: NXDOMAIN looking up A for kjfhaifahoa.cn -
   check that a DNS record exists for this domain

解决办法:检查通过域名能否正确访问到服务器,如域名是否正确,域名是否已备案或备案是否已通过。

                  我出现这个问题时是因为域名正在备案,但还没有通过,域名备案通过后就没问题了。

问题3:nginx: [emerg] unknown directive “ssl_certificate1” in /usr/local/nginx/conf/nginx.conf:94

                  这个是因为 nginx 没有装 ssl 模块,安装 ssl 模块即可

1.在nginx的安装目录执行

./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

2.在nginx安装目录执行

make

3.上一步执行完重启 nginx,如果不报错,说明安装成功。如果报错,再执行下一句(亲测make install不会覆盖之前的配置)

make install

问题4:配置好Nginx及证书后浏览器报“响应时间过长”

阿里域名申请 SSL证书_第1张图片

解决办法:这个是因为服务器 443 端口未开启( HTTPS 服务使用的是 443 端口)。开启 443 端口即可:

                  1. 我的是阿里云服务器,需要登录阿里云控制台,添加 “入方向” 规则

阿里域名申请 SSL证书_第2张图片

                  2. 设置防火墙,放行 443 端口,先运行 nginx 监听 443 端口, 再配置防火墙规则放行 443 端口

iptables -I INPUT -p tcp --dport 443 -j ACCEPT

问题5:配置好证书后360浏览器还是报证书错误

             这个是因为 Let's Encrypt 证书不被360浏览器,换浏览器打开或者换证书即可。

             腾讯提供免费的SSL证书,一年一换:https://console.cloud.tencent.com/ssl/apply

阿里域名申请 SSL证书_第3张图片

问题6:配置 Http 强制跳转 Https

注意: 1)return 301 https://$server_name$request_uri;

            2)return 301 https://$http_host$request_uri;

            使用 http 发起请求时,这两种写法都能实现 http 转 https,却别是: 1)在浏览器地址栏能看到地址由 http 变为了 https,但是 2)看不到,也就是转发到 https 后浏览器地址栏实际看到的还是http

# http使用的是 80 端口,将 80 端口的请求都转发到 https 即 443 端口
server {
    listen 80;
    server_name kiion.cn www.kiion.com;
    return 301 https://$server_name$request_uri;
}
server {
    listen 443 ssl;
    server_name kiion.cn www.kiion.com;
    ssl_certificate /etc/letsencrypt/live/kiion.cn/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/kiion.cn/privkey.pem;
}

 

你可能感兴趣的:(运维)