阿里云centos7+nginx使用安装免费的泛域名SSL证书

准备

  • 已购买已备案的域名
  • acme.sh 是一个自动申请 https 证书的脚本,使用方便,功能也非常强大。
    安装:
    curl https://get.acme.sh | sh

    wget -O - https://get.acme.sh | sh

    这样你已经把 acme.sh 这个小工具安装到你本地的 ~/.acme.sh/中了,而不会在你系统的其它地方装些乱七八糟的东西。

生成证书

这篇文章后面用到的一键脚本申请Let's Encrypt泛域名SSL证书,是利用第三方域名DNS API接口快速申请的,这样。无论我们Linux VPS、服务器使用的何种WEB环境都可以快速申请。

根据脚本的介绍,提供且支持我们常见的第三方DNS,包括DNSPOD、CLOUDXNS、阿里云DNS、GoDaddy、CLOUDFLARE、PowerDNS、Linode 等40多家DNS服务商。如果我们域名有用哪家的DNS,然后到对应的商家申请API。查看支持的商家:https://github.com/acmesh-official/acme.sh/wiki/dnsapi

阿里云购买域名的朋友可以走这个极速通道,因为阿里云有接口可以直接操作域名控制台,这个接口已经被整合到了 acme.sh 这个工具里面。只要设置一下 Ali_Key 和 Ali_Secret,获取入口:https://ak-console.aliyun.com/#/accesskey

  1. 在你的命令行中执行如下命令:
    export Ali_Key="换成你的 AccessKey ID"
    export Ali_Secret="换成你的 Access Key Secret"
  2. 开始申请证书
    acme.sh --issue --dns dns_ali -d im20.life -d '*.im20.life'
    im20.life 是我的域名,这里需要换成你的。

参数解释:
acme.sh :表示使用你刚安装好的acme.sh
--issue :申请证书
--dns dns_ali:使用阿里云的 dns 服务,在阿里云买的域名,在没有修改默认 dns 的前提下,都可以使用这个参数来申请 https 证书。
-d im20.life-d表示 domain,后面跟你要申请域名。
-d '*.im20.life':这里的-d 与上方一样,-d 参数可以带多个,这里的'*.im20.life'中的 * 表示泛域名,只要申请了这个证书像(www.im20.life, m.im20.life ...)这类的二级域名都可以使用此证书来实现 https。注意 baidu.com这个域名不在这条规则里,所以上面又加了一条-d im20.life,这样你的主域名、二级子域名均可以使用此证书。

证书生成成功后,默认保存在 .acme.sh/你的顶级域名 中。如下图所示即为成功。

配置Nginx

1、移动证书到/etc/nginx/cert文件夹,若无该文件夹,自行创建。

cp ~/.acme.sh/im20.life/fullchain.cer /etc/nginx/cert/fullchain.cer
cp ~/.acme.sh/im20.life/im20.life.key /etc/nginx/cert/im20.key

2、新建 ssl-params.conf 并把它放到 Nginx 的 snippets 目录中。

# /etc/nginx/snippets/ssl-params.conf
server_tokens   off;

ssl_session_cache        shared:SSL:10m;
ssl_session_timeout      60m;

ssl_session_tickets      on;

ssl_stapling             on;
ssl_stapling_verify      on;

resolver                 8.8.4.4 8.8.8.8  valid=300s;
resolver_timeout         10s;
ssl_prefer_server_ciphers on;

# 证书路径 绝对地址
ssl_certificate          /etc/nginx/cert/fullchain.cer;
ssl_certificate_key      /etc/nginx/cert/im20.key;

ssl_protocols            TLSv1 TLSv1.1 TLSv1.2;

ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";

add_header Strict-Transport-Security "max-age=31536000;includeSubDomains;preload";
add_header  X-Frame-Options  deny;
add_header  X-Content-Type-Options  nosniff;
add_header x-xss-protection "1; mode=block";
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' blob: https:; connect-src 'self' https:; img-src 'self' data: https: blob:; style-src 'unsafe-inline' https:; font-src https:";

3、接下来在 Nginx 主配置文件中开启 SSL 支持

# /etc/nginx/nginx.conf

http {
    ....
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
}

4、配置虚拟主机

# /etc/nginx/conf.d/im20.life.conf
server {
    listen 80 default_server;
    listen [::]:80 default_server;

    server_name im20.life www.im20.life;    
    return 301 https://$server_name$request_uri;
}

server {
    # 注意我们设置该站点为默认站点,并移除了 nginx 默认的 default 配置
    listen 443 ssl http2 fastopen=3 reuseport default_server;
    listen [::]:443 ssl http2 fastopen=3 reuseport default_server;

    server_name www.im20.life im20.life;

    # 引入 SSL 及 PHP 配置
    include snippets/fastcgi-php.conf;
    include snippets/ssl-params.conf;

    root /home/www/websites/im20.life/public;

    access_log /home/www/websites/im20.life/storage/logs/nginx-access.log;
    error_log  /home/www/websites/im20.life/storage/logs/nginx-error.log error;    index index.php;

    # 当访问域名是不  im20.life 强制跳转到 https://im20.life
    if ($host != 'im20.life' ) {
        rewrite ^/(.*)$ https://im20.life/$1 permanent;
    }
}

二级域名blog.im20.life的配置

# /etc/nginx/conf.d/blog.im20.life.conf
server {
    listen 80;
    listen [::]:80;
    server_name blog.im20.life;    
    return 301 https://$server_name$request_uri;
}
server {
    # 如果多个域名配置在同一主机,这里只需要监听到 433 就可以了,
    # 不需要再添加 ssl http2 fastopen=3 reuseport default_server 之类的了
    listen 443;      
    listen [::]:443;

    root /home/www/websites/blog.im20.life/public-admin;

    access_log /home/www/websites/blog.im20.life/storage/logs/nginx-access.log;
    error_log  /home/www/websites/blog.im20.life/storage/logs/nginx-error.log error;

    server_name blog.im20.life;    
    index index.php;

    client_max_body_size 20M;

    include snippets/fastcgi-php.conf;
    include snippets/ssl-params.conf;    
    if ($host != 'blog.im20.life' ) {
        rewrite ^/(.*)$ https://blog.im20.life/$1 permanent;
    }
}

5、虚拟主机配置完成后重启nginx即可

service nginx restart

完!

发布了121 篇原创文章 · 获赞 102 · 访问量 38万+

猜你喜欢

转载自blog.csdn.net/Alen_xiaoxin/article/details/105353038