本站今日全站HTTPS 记录一下过程以及坑

 jvxiang   2018-03-24 21:37   1,677 人阅读  0 条评论

一、简介

最近https越来越火,并且let's sencrypt开始支持泛域名,弄张泛域名证书跟其他子域名一起用,也省心了。

最主要的原因还是发现我们这边的联通各种劫持,打开自己的站总是发现有些莫名其妙的广告。也怕别的地方哪个运营商给我来个乱七八糟的广告啥的,就上https吧,防劫持还是管用的。

本次使用的是let's sencrypt的泛域名证书,其实主要原因还是宝塔的一键https并不好用,要没有301,没有CDN之类的一堆前提下才行。申请了几次都给我报错了。

二、过程

  1. 安装acme.sh:
    证书使用acme.sh来获取,首先ssh登录vps,执行
    curl https://get.acme.sh | sh#或者wget -O - https://get.acme.sh | sh#任选一种

    任选一种方式可以下载并安装acme.sh,acme.sh会安装在~/.acme.sh目录下,这个目录是隐藏的,ls不能列出,如果列出隐藏目录,使用ls -a命令。
    acme.sh会给做两件事情

    -创建 一个 bash 的 alias, 方便你的使用:  alias acme.sh=~/.acme.sh/acme.sh
    -自动为你创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书。

    我使用过程中并没有自动添加alias,不知道是什么问题,如果你也没有自动添加,可以在用户目录下自行定义一个。如果你对linux一窍不通,请按照我下面的方式输入,回车前不用加空格。
    cd 回车vi .bash_profile 回车#在命令模式下shift+goalias acme.sh=~/.acme.sh/acme.shesc:wq 回车. .bash_profile 回车

  2. 获取证书
    let's sencrypt域名所有权验证支持http验证与dns验证两种方式,但是泛域名证书只支持dns的方式验证。acme.sh两种方式都支持,由于我们使用了泛域名,所以这里介绍dns方式验证域名。想使用http的方式请自行查看acme.sh的说明文档。
    dns验证需要给对应的域名添加TXT记录,acme.sh的强大之处就是能使用 cloudflare, dnspod, cloudxns, godaddy 以及 ovh 等数十种解析商的API直接集成,国内外常见的域名服务商几乎都包含了。我的域名解析在dnspod,所以我以dnspod为例进行说明。
    export DP_Id="dnspod id"export DP_Key=dnspod key"acme.sh --issue --dns dns_dp -d jvxiang.com -d *.jvxiang.com

    正常情况下就会获取到秘钥文件,显示success。
  3. 存储证书
    acme.sh不推荐直接使用acme.sh目录下的证书文件,因为acme.sh的目录格式有可能会改变。所以我们需要将证书放到其他位置,acme.sh同样提供了对应的命令。
    acme.sh --install-cert -d jvxiang.com \--key-file /etc/ssl/jvxiang.com/key.pem \--fullchain-file /etc/ssl/jvxiang.com/cert.pem \--reloadcmd "service nginx reload"

    这里是nginx的命令例子,其中key-file与fullchain-file的目录自己选择,我是放在了/etc/ssl/jvxiang.com下。第一次生成的key没有other的读权限,所以建议修改一下权限,644与755都可以,命令
    chmod 644 /etc/ssl/jvxiang.com/*

    其中/etc/ssl/jvxiang.com/改为你自己的目录。
  4.  修改nginx配置
    修改要添加的网站的conf文件。例子如下
     listen 80; listen 443 ssl http2; server_name www.jvxiang.com jvxiang.com; index index.php index.html index.htm default.php default.htm default.html; root /www/wwwroot/www.jvxiang.com; #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则 #error_page 404/404.html; #HTTP_TO_HTTPS_START if ($server_port !~ 443){ rewrite ^(/.*)$ https://$host$1 permanent; } #HTTP_TO_HTTPS_END ssl_certificate /etc/ssl/jvxiang.com/cert.pem; ssl_certificate_key /etc/ssl/jvxiang.com/key.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; error_page 497 https://$host$request_uri; #SSL-END

    该示例根据宝塔面板的ssl规则生成。其中需要监听443端口配置ssl如果nginx已经添加了http2模块可以配置http2。
     if ($server_port !~ 443){ rewrite ^(/.*)$ https://$host$1 permanent; }

    这部分是强制http跳转到https。
     ssl_certificate /etc/ssl/jvxiang.com/cert.pem; ssl_certificate_key /etc/ssl/jvxiang.com/key.pem;

    这部分配置刚刚上面保存的证书文件。
    做完这些后,尝试访问一下https站点,是不是已经可以访问了?证书部分大功告成。

三、修改wordpress

修改wordpress的内容网上已经很多了,大体来谈一谈把。

主要就是几个内容:

  1. 在“后台->设置->常规” 里面把地址改成https。
  2. 修改一下主体的function.php文件。将图片由http改为https。
    * 替换图片链接为 https */function my_content_manipulator($content){ if( is_ssl() ){ $content = str_replace('http://www.jvxiang.com/wp-content/uploads', 'https://www.jvxiang.com/wp-content/uploads', $content); } return $content;}add_filter('the_content', 'my_content_manipulator');

    将图片地址由http转为https。
  3. 一些不支持https的内容配置,比如我在用的百度分享。
  4. 其实貌似用插件WordPress HTTPS直接可以解决这部分问题。

关于百度分享,还有CDN的问题与遇到的坑,等下次再讲把,这篇文章够长的了。

本文地址:https://www.jvxiang.com/本站今日全站https-记录一下过程以及坑.html
版权声明:本文为原创文章,版权归 jvxiang 所有,欢迎分享本文,转载请保留出处!

 发表评论


表情