onlyoffice在o2oa下安装部署后,https模式下可以正常预览。为了安全起见,决定启用https模式,于是按照官方文档(https://www.o2oa.net/course/lz2heo.html)的介绍,采用了自签名证书的模式,后来发现onlyoffice在https模式下不能使用了,折腾整整5天时间,查阅了大量文章,发现官方发布的试用版本中,在https模式下也无法预览,官方相关文档和论支坛也未提到类似问题,于是总结如下。
(今天是2022年3月8日,女同胞们的日子,问题得以解决,很开心哦!)
废话少说,现将出现的问题及解决办法总结如下:
一、解决o2oa与onlyoffice访问时出现的Mix Content问题
按F12打开开发人员工具在console下显示Mix Content(网站混合),原因是o2oa已经实现https://xxx.xxx.xxx访问了,而onlyoffice仍然采用httpp访问。于是参考文章(https://blog.csdn.net/hotqin888/article/details/112722607)实现了onlyoffice通过https访问,Mix Content问题得以解决。
二、继续解决onlyoffice在预览文件时提示“下载失败”问题
原因1:SSL 认证之后,request.getScheme()获取不到https的问题记录
通过如下命令进入onlyoffice容器
#docker exec -it onlyoffice容器ID bash
通过如下命令查看onlyoffice的日志
#find / -name out.log
/var/log/onlyoffice/documentserver/converter/out.log
/var/log/onlyoffice/documentserver/docservice/out.log
/var/log/onlyoffice/documentserver/spellchecker/out.log
/var/log/onlyoffice/documentserver/metrics/out.log
/var/log/onlyoffice/documentserver/gc/out.log
#cat /var/log/onlyoffice/documentserver/docservice/out.log
发现http://xxx.xxx.xxx:20020/xxxx
这是问题的关键所在,原因是SSL 认证之后,request.getScheme()获取不到https的问题记录(参见文章https://www.cnblogs.com/start-fxw/p/7890337.html),我只参考了该文章的原因,具体解决办法是修改: xxx/o2server/servers/applicationServer/work/x_onlyofficefile_assemble_control/WEB-INF/classes/com/x/onlyofficefile/assemble/control/jaxrs/onlyoffice/utility/DocumentManager.class的源码DocumentManager.java,DocumentManager.java源码路径:xxxx\o2server\servers\applicationServer\work\x_onlyofficefile_assemble_control\describe\sources\com\x\onlyofficefile\assemble\control\jaxrs\onlyoffice\utility\DocumentManager.java
将所有 request.getScheme()修改为字符串 “https”,在eclipse中重新导出DocumentManager.class即可。
原因2:docker node js无法对客户端自签名证书进行认证
解决办法:关闭客户端证书认证
- 进入onlyoffice容器并修改onlyoffice的default.json文件
参考文献:https://blog.csdn.net/boliang319/article/details/105650310
docker exec -it 容器ID bash
通过如下命令修改default.json文件,将"rejectUnauthorized"修改为false
#vim /etc/onlyoffice/documentserver/default.json
"requestDefaults": {
"headers": {
"User-Agent": "Node.js/6.13"
},
"rejectUnauthorized": false
}
注意:如下onlyoffice容器内无法使用vim命令,可尝试#apt-get update 然后 #apt-get install vim 如果仍然不行,可通过docker cp将容器内的default.json复制到linux宿主机修改后复制回去。
2.重启onlyoffice的docker容器,使配置生效
docker restart 容器ID
还有一个问题需手动处理,在浏览器中,onlyoffice的api.js文件无法自动加载,需要访问网址
https://xxx.xxx.xxx:xx/web-apps/apps/api/documents/api.js进行手动加载。
3.onlyoffice容器无法访问onlyoffice的https网址
可参考https://blog.csdn.net/boliang319/article/details/105651678?spm=1001.2014.3001.5502
总之,采用自签名证书的优点是免费,但也会带来一些意想不到的问题,证书的签发时间可以比商业授权的长得多,但安全性相对较低,有条件建议购买商业证书。
最后,o2oa的开源精神值得点赞,但开源不等于免费,建议有需求的客户购买其官方服务,毕竟专业的人干专业的事,尊重知识,支持原创,并非任何问题都能靠一已之力解决。