美文网首页
使用 HTTPS 访问 Leanote 站点

使用 HTTPS 访问 Leanote 站点

作者: yibuyisheng | 来源:发表于2018-08-10 23:46 被阅读313次

    原文地址

    在上一篇文章《群晖 Docker 搭建自有 Leanote 服务》中,介绍了如何在群晖 Docker 中部署 Leanote 服务,最终做到了在浏览器中通过 HTTP 协议访问服务。

    但是 HTTP 并不安全,对于我们博客站点,比较蛋疼的缺陷就是运营商会在页面注入广告,这不能忍。

    那么切换到 HTTPS 就很有必要了。

    准备证书

    群晖 DSM 系统很贴心,已经为我们提供了默认证书,同时也可以用图形化界面的方式生成证书。

    进入“控制面板->安全性->证书”,即可看到有哪些信息:

    image

    这块的基本配置过程比较简单,此处不赘述。

    反向代理服务器

    实际上,配置成功之后,我们期望用户的请求处理流程是这样的:

    • HTTPS 请求进入反向代理服务;
    • 反向代理服务通过配置得到该请求的目标服务器(Docker 容器)信息,然后用 HTTP 方式向目标服务器发起请求;
    • 目标服务器响应反向代理服务的请求,发送 HTTP 响应报文;
    • 反向代理服务器拿到 HTTP 响应报文后,将其转换为 HTTPS 响应报文,发送给用户。

    调整 Docker 容器及 Leanote 配置

    由于配置成功后,我们还想使用之前的 9000 端口来访问服务,因此不能直接在 Docker 处做端口映射,停掉 Docker 服务,然后删掉之前配置的 9000 端口映射即可。

    另外,/data/leanote/conf/app.confsite.url 也要改成 https 形式。

    调整完之后,启动容器。

    配置反向代理规则

    进入“控制面板->Synology 应用程序门户->反向代理服务器”,可以在这里管理反向代理规则。

    点击“新增”按钮,填上如下配置:

    image

    由于 HTTP2 有多路复用优化,所以此处启用了 HTTP2。

    HSTS 主要是让 HTTPS 更加安全。因为现在处于 HTTP -> HTTP2 的过度时期,很多时候访问服务器的不会一上来就声明采用 HTTPS 方式。比如用户在地址栏里面输入:www.baidu.com,实际上浏览器会首先将这个地址补全为 http://www.baidu.com,然后执行后续流程,但是 www.baidu.com 这边又只提供了 HTTPS 服务,这个时候就需要将 HTTP 转换成 HTTPS。

    问题是,在这个过程中,浏览器怎么知道应该转换呢?在之前,有一种方案:

    • 浏览器将 http://www.baidu.com 请求发给服务器;
    • 服务器收到请求之后,返回一个重定向响应(3xx),让浏览器重新发起一个 HTTPS 请求。

    很明显,这个过程会存在中间人攻击风险(SSL 剥离攻击)。于是有人提出了另一种方案:

    • 浏览器将 http://www.baidu.com 请求发送给服务器,服务器直接返回错误页面;
    • 用户通过某种途径(可能手动地址栏输入,可能点击了某个其他站点的链接),发送 https://www.baidu.com 到服务器,服务器在响应头中包含 Strict-Transport-Security 字段,告诉浏览器,在之后多长时间内,浏览器将相关域名的 HTTP 请求,全部转换成 HTTPS,而不是直接向服务器发送 HTTP 请求。

    这样一来,就有效规避了 SSL 剥离攻击。

    Enjoy yourself

    配置完毕,在浏览器地址栏中输入:https://test.synology.me:9000,尽情享用吧!

    别忘了调整客户端

    由于之前配置客户端的时候,写的“自建服务地址”是使用 HTTP 协议的,改成 HTTPS 后,这些客户端也要做相应的调整。

    相关文章

      网友评论

          本文标题:使用 HTTPS 访问 Leanote 站点

          本文链接:https://www.haomeiwen.com/subject/lrrrbftx.html