Nginx配置SSL证书 https网站搭建

自从chrome升级之后,每次打开我自己的网站,浏览器总是有个感叹号,看起来极其碍眼,以后https毕竟是发展趋势,索性就把网站升级成https
升级前的,有个感叹号

no_https

升级后的,有个小绿锁,好看多了~~
has_https

一、申请证书

使用acme.sh申请letsencrypt证书

  • 安装acme
curl  https://get.acme.sh | sh
  • 创建acme.sh快捷命令
alias acme.sh=~/.acme.sh/acme.sh

创建证书

  • nginx 方式
acme.sh --issue -d <域名> --nginx
  • -d 后面是域名
ca_issue_success

创建完成后,证书将放在

~/.acme.sh/<域名>路径下

创建证书保存目录

  • 在任意位置创建一个文件夹,名字可以任意
mkdir /var/www/ssl/
  • ~/.acme.sh/<域名>下的证书拷贝到/var/www/ssl/目录下
cp -r ~/.acme.sh/<域名>/ /var/www/ssl/

二、nginx 配置

配置nginx

server {
    listen 443 ssl;
    listen [::]:443 ssl ipv6only=on;
    server_name <域名>;

    ssl on;
    ssl_certificate /var/www/ssl/<域名>/fullchain.cer;
    ssl_certificate_key /var/www/ssl/<域名>/<域名>.key;
}

配置http强制跳转到https(采用301方式)

server {
    listen 80;
    server_name laoyuyu.me www.laoyuyu.me;

    return 301 https://www.laoyuyu.me$request_uri;
}

三、安装证书

安装证书

acme.sh --installcert -d <域名> --key-file /var/www/ssl/<域名>/<域名>.key --fullchain-file /var/www/ssl/<域名>/fullchain.cer --reloadcmd "service nginx force-reload"
  • -d 后面是域名
  • --key-file 后面是<域名>.key 文件
  • --fullchain-file 后面是cer证书路径
  • --reloadcmd 为重启nginx的命令

三、常见问题

chrome 没有小绿锁

原因是,二级域名没有匹配
如:我这laoyuyu.me是匹配了,但是img.laoyuyu.me没有匹配,这样就不能出现小绿锁


Nginx配置SSL证书 https网站搭建_第1张图片
chrome_https_load_fail

Too many certificates already

证书重置请求超过次数,一般 3 次,子域名除外。就会出现 Sign failed: “detail”:”Error creating new cert :: Too many certificates already issued for exact set of domains: devhitao.com, 5 天以后才可以再次重置。Rate Limits
解决方法:
不使用rewrite ^(.*)$ https://www.laoyuyu.me$1 permanent;方式,采用301跳转方式

同一个IP上配置多个HTTPS主机出现链接不安全问题

server {
    listen 443;
    server_name www.quwenqing.com;
    ssl on;
    ssl_certificate www.quwenqing.com.crt;
}

server {
    listen 443;
    server_name qwq.quwenqing.com;
    ssl on;
    ssl_certificate qwq.quwenqing.com.crt;
}

使用上面的配置,不论浏览器请求哪个主机,都只会收到默认主机www.quwenqing.com的证书。这是由SSL协议本身的行为引起的——先建立SSL连接,再发送HTTP请求,所以nginx建立SSL连接时不知道所请求主机的名字,因此,它只会返回默认主机的证书。

查看是否启用了TLS:

nginx -V
nginx version: nginx/1.4.6
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) 
TLS SNI support enabled

查看支持TLS协议支持版本:

nmap --script ssl-enum-ciphers -p 443 192.168.192.120

如果已经支持了,但是二级域名还是失败,检查listen [::]:80 ssl ipv6only=on; 80端口是否开启了ssl,如果有的话,删除这行就行了

server {
   # listen 80;
   # listen [::]:80 ssl ipv6only=on;
    listen 443 ssl;
    listen [::]:443 ssl ipv6only=on;
    server_name <域名>;
    ssl on;
    ssl_certificate /var/www/ssl/<域名>/fullchain.cer;
    ssl_certificate_key /var/www/ssl/<域名>/<域名>.key;
}

四、个人nginx配置

server {
    listen 80;
    server_name laoyuyu.me www.laoyuyu.me;

    return 301 https://www.laoyuyu.me$request_uri;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl ipv6only=on;

    root /var/www/hexo;
    server_name laoyuyu.me www.laoyuyu.me;

    ssl on;
    ssl_certificate /var/www/ssl/www.laoyuyu.me/fullchain.cer;
    ssl_certificate_key /var/www/ssl/www.laoyuyu.me/www.laoyuyu.me.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    location / {
           try_files $uri $uri/ =404;
    }
}

server {
    listen 80;
    server_name aria.laoyuyu.me;

    return 301 https://$server_name$request_uri;
}

server {
     listen 443 ssl;
     listen [::]:443 ssl;
     # root /var/www/gitbook;
     server_name aria.laoyuyu.me;

     ssl on;
     ssl_certificate /var/www/ssl/aria.laoyuyu.me/fullchain.cer;
     ssl_certificate_key /var/www/ssl/aria.laoyuyu.me/aria.laoyuyu.me.key;
     ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

      location /aria_doc {
          alias /var/www/gitbook/;
          index index.html;
     }

     location / {
          rewrite (.*) https://github.com/AriaLyy/Aria redirect;
     }
}

参考文档

  • acme使用文档
  • nginx ssl配置

你可能感兴趣的:(Nginx配置SSL证书 https网站搭建)