ego008
ego008
4059 10 0

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

这种简单的方式全依赖 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

0

See Also

Nearby


Discussion (10)

qoo酷儿
qoo酷儿 2018-01-17 06:21

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

0
TU
TU 2018-01-17 06:47

程序v

0
TU
TU 2018-01-17 06:47

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

0
ego008
ego008 2018-01-17 08:12

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

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

程序同时也监听80 端口

0
qoo酷儿
qoo酷儿 2018-01-17 08:18

详情说下,参照这里:https://www.youbbs.org/t/2170
生成证书毫无问题,但生成之后,启用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
https://youbbs.org/.well-known/acme-challenge/test.txt
预感,这问题依旧存在。

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

0
qoo酷儿
qoo酷儿 2018-01-17 08:21

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

0
qoo酷儿
qoo酷儿 2018-01-17 08:42

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

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
0
ego008
ego008 2018-01-17 08:53

@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

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

0
ego008
ego008 2018-01-17 12:44

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

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

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

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

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

0
qoo酷儿
qoo酷儿 2018-01-17 13:24

@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 还长……

0
Login Topics