youBBS 已支持最简单的https 开启方式

By ego008 at 2018-01-16 20:33 • 993次点击
ego008

这种简单的方式全依赖 golang 官方库 golang.org/x/crypto/acme/autocert ,前些天因为Let’s Encrypt 停用 tls-sni ,该库不能正常使用,昨天 alex 大神更新了:支持 http-01 认证。就修改了youBBS 的代码,同时支持两种方式:

1)最简单的方式

修改配置文件 config/config.yaml 下面三项:

Main:
    HttpPort: 80
    HttpsOn: true
    Domain: "yourdomain.com"

下面两个一定要留空:

    TLSCrtFile: ""
    TLSKeyFile: ""

2)用其它工具生成 crt 和 key ,在配置文件里填上它们的路径,如:

Main:
    HttpPort: 80
    HttpsOn: true
    Domain: "yourdomain.com"
    ...
    TLSCrtFile: "/root/ssl/chained.pem"
    TLSKeyFile: "/root/ssl/domain.key"

生成的具体方法参考 https://www.youbbs.org/t/2169 37


youbbs, https, 方式


哈哈,已测试,不支持@+www两个域名。只支持一个。
我是独占80/443端口,也就是没加nginx等前端转发。
另外证书到期更新,我也觉得也会有问题。因为在已443的状态下,验证域名会失败。

qoo酷儿 at 2018-01-17 14:21
1

程序v

TU at 2018-01-17 14:47
2

@qoo酷儿 这是你说的情况吗

TU at 2018-01-17 14:47
3

@qoo酷儿 可注册多个域名了

Main:
    ...
    Domain: "sub1.example.com,sub2.example.com"

程序同时也监听80 端口

ego008 at 2018-01-17 16:12
4

详情说下,参照这里:https://www.youbbs.org/t/2170 48
生成证书毫无问题,但生成之后,启用443之后,要再更新下证书就报错了,域名验证不通过,没法更新证书日期。仔细看了下,发现是因为在

HttpsOn: true
状态之下,无论重生成证书还是更新日期,都不行,只有改回 false 换回80端口,就正常了。

尝试将 acme_tiny.py 里的报错123行,把 http 改成 https 来验证域名,还是没成功。
其实放在静态目录的 /static/test.txt 无论80还是443都能访问的,但就是没通过域名验证

http://youbbs.org/.well-known/acme-challenge/test.txt 1
https://youbbs.org/.well-known/acme-challenge/test.txt
预感,这问题依旧存在。

另,还发现个Bug,因为懒,没用nginx前端,也没使用进程守护,就 ./goyoubbs & + 写入 rc.local ,测试中,发现要是 kill -9 掉进程后再一次 ./goyoubbs & 的话,竟然关闭ssh就失效的情况,不想排查原因了,每次干脆就reboot 重启算了,再发现,竟然重启了,程序的在线时间竟然没重置啊……

本站已稳定运行 X 天 
qoo酷儿 at 2018-01-17 16:18
5

@ego008 第一时间就试过了,加上www域名上去了,不行,简单点的问题还是会动手的。
倒是不明白下面的 maindomain 又是什么关系,因为是独占80/443端口的了,127.0.0.1:8082 我改成 domain.com 了

qoo酷儿 at 2018-01-17 16:21
6

哈哈,刚把证书的目录删了,再测试就全挂了,好像是验证服务那边挂了……

http: TLS handshake error from 108.162.215.125:29523: acme/autocert: host not configured
http: TLS handshake error from 108.162.215.125:23731: acme/autocert: host not configured
qoo酷儿 at 2018-01-17 16:42
7

@qoo酷儿 多域名已测试通过

# 2018/01/17 03:47:44 MainDomain: http://127.0.0.1:8082
2018/01/17 03:47:44 youdb Connect to mydata.db
2018/01/17 03:47:44 Register sll for domain: dig.youbbs.org,dig2.youbbs.org
2018/01/17 03:47:44 TLSCrtFile :  
2018/01/17 03:47:44 TLSKeyFile :  
2018/01/17 03:47:44 Web server Listen port 443
2018/01/17 03:47:44 Web server URL https://dig.youbbs.org,dig2.youbbs.org

如果不成功请下载最新主程序 https://github.com/ego008/goyoubbs/commit/a08adda8f90ffb578dd4eff51b50ed5561f83500 4

自动更新可能会有问题,路由冲突,晚点测试。

ego008 at 2018-01-17 16:53
8

@qoo酷儿 利用 acme_tiny.py 生成、更新证书都正常,稍不同的是:生成时只开启 80 端口,更新时 80 、 443 端口都要开。80 端口过来的请求都转向了,HttpsOn: true 不影响更新。

用 & 关闭 ssh 就失效的情况我也遇到过,可能情况不同,如果是让 ssh 窗口自己过期关闭就可能失效,要敲 exit 退出。

调用 MainDomain 的地方
https://github.com/ego008/goyoubbs/search?utf8=✓&q=MainDomain 1

把证书目录删掉后 acme/autocert 会自动再次生成,但它没有输出更多的 log ,如果申请不成功可能是Let’s Encrypt 的限制,具体参考 https://letsencrypt.org/docs/rate-limits 1

前面个人担心的路由问题不存在,使用两种方式都不冲突。

ego008 at 2018-01-17 20:44
9

@ego008 那就奇怪了,之前更新证书都遇到问题,更新出来的signed.crt 都是空的,也就是这一步没成功

python acme_tiny.py --account-key ./account.key --csr ./domain.csr --acme-dir /srv/www/youbbs/static/ > ./signed.crt

可能是acme_tiny.py也更新了。ssh掉线程了没啥,只是重启之后,程序的在线时间没更新,结果就是网站的在线时间比vps上的uptime 还长……

qoo酷儿 at 2018-01-17 21:24
10
登录 后发表评论