解决O2OA自签名证书后onlyoffice无法预览及保存文件问题
本帖最后由 论坛管理员 于 2022-6-14 09:30 编辑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已经实现域名通过HPPS协议访问了,而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无法对客户端自签名证书进行认证解决办法:关闭客户端证书认证(1)进入onlyoffice容器并修改onlyoffice的default.json文件参考文献:https://blog.csdn.net/boliang319/article/details/105650310docker 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网址 总之,采用自签名证书的优点是免费,但也会带来一些意想不到的问题,证书的签发时间可以比商业授权的长得多,但安全性相对较低,有条件建议购买商业证书。最后,o2oa的开源精神值得点赞,但开源不等于免费,建议有需求的客户购买其官方服务,毕竟专业的人干专业的事,尊重知识,支持原创,并非任何问题都能靠一已之力解决。
:handshake:handshake:handshake 补充一下,经过上面一翻折腾之后,onlyoffice在表单中可以正常预览了,但在线协作打开文件时会报“下载失败错误”,解决办法如下:
找到xxx/o2server/servers/webServer/x_component_CloudDocumentEditor下的Main.js文件
先将Main.min.js修改为Main.min.js.bak,再将Main.js修改为Main.js,然后在文件最后倒数第16-17行,有如下两条语句:
this.document.editor.document.url = o2.filterUrl(this.document.editor.document.url.replace(/http/,"https"));
this.document.editor.editorConfig.callbackUrl = o2.filterUrl(this.document.editor.editorConfig.callbackUrl);
用replace将http替换成https,即改成如下的样子:
this.document.editor.document.url = o2.filterUrl(this.document.editor.document.url.replace(/http/,"https").replace(/undefined/,"o2oa"));
this.document.editor.editorConfig.callbackUrl = o2.filterUrl(this.document.editor.editorConfig.callbackUrl).replace(/http/, "https");
页:
[1]