升级MediaWiki至1.35后VisualEditor遇SSL错误求助
我之前处理过好几个类似的MediaWiki+VisualEditor+反向代理的SSL问题,你的情况核心是Parsoid/RESTBase在和后端Wiki通信时,没办法信任Let's Encrypt的证书,或者反向代理的配置有遗漏。给你几个一步步排查的方案:
1. 确认Parsoid的Wiki端点配置
首先检查Parsoid的config.yaml(旧版本可能是localsettings.js)里的mwApis配置项,确保填写的Wiki URL是HTTPS协议,并且和反向代理对外暴露的域名完全一致,比如:
mwApis: - uri: 'https://your-wiki-domain/w/api.php' domain: 'your-wiki-domain'
如果这里用了HTTP协议,或者域名和证书上的域名不匹配,会直接触发证书验证失败。
2. 让Parsoid信任Let's Encrypt根证书
curl error 60通常是因为系统的根证书库没有包含Let's Encrypt的根证书(比如一些老系统或者容器环境)。你可以这么做:
- 先验证证书链是否完整:在Parsoid所在服务器上执行
openssl s_client -connect your-wiki-domain:443,查看输出里的证书链是否包含ISRG Root X1。 - 如果缺失根证书,手动安装系统证书包:
- Debian/Ubuntu系统:
sudo apt install ca-certificates - RHEL/CentOS系统:
sudo yum install ca-certificates
- Debian/Ubuntu系统:
- 要是是容器化部署,还可以在Parsoid的
config.yaml里直接指定系统根证书路径:
ssl: caFile: '/etc/ssl/certs/ca-certificates.crt'
(路径根据你的实际环境调整,比如部分容器里是/usr/local/share/ca-certificates/ca-certificates.crt)
3. 检查Apache反向代理的SSL配置
确保反向代理的VirtualHost配置里,正确传递了完整的证书链,并且设置了必要的HTTP头:
<VirtualHost *:443> ServerName your-wiki-domain SSLEngine on SSLCertificateFile /etc/letsencrypt/live/your-wiki-domain/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/your-wiki-domain/privkey.pem # *这行很重要*,确保传递完整的证书链给Parsoid SSLCertificateChainFile /etc/letsencrypt/live/your-wiki-domain/chain.pem # 反向代理到MediaWiki后端(比如本地的8080端口) ProxyPass / http://localhost:8080/ ProxyPassReverse / http://localhost:8080/ # 传递HTTPS协议标识,让MediaWiki生成正确的HTTPS链接 RequestHeader set X-Forwarded-Proto "https" RequestHeader set X-Forwarded-Host "your-wiki-domain" </VirtualHost>
如果没设置X-Forwarded-Proto,MediaWiki可能会生成HTTP的内部API链接,导致Parsoid通信时协议不匹配,进而触发证书错误。
4. 调整MediaWiki的VisualEditor配置
在MediaWiki的LocalSettings.php里,确保Parsoid的端点配置正确,必要时可以临时关闭证书验证来排查问题(但别长期用,有安全风险):
# 设置Parsoid的本地访问地址(如果Parsoid和Wiki在同一服务器,用本地地址更安全) $wgVisualEditorParsoidURL = 'http://localhost:8142'; $wgVisualEditorParsoidPrefix = 'your-wiki-domain'; # 仅用于排查:如果Parsoid必须通过HTTPS访问Wiki且证书验证失败,临时关闭验证 # $wgVisualEditorParsoidSettings = [ # 'ssl' => [ 'rejectUnauthorized' => false ] # ];
记住,rejectUnauthorized设为false会跳过证书验证,排查完成后一定要注释掉这部分配置。
5. 测试Parsoid与Wiki的连通性
在Parsoid所在服务器上,用curl直接测试Wiki的API端点,确认通信是否正常:
curl -v https://your-wiki-domain/w/api.php?action=query&meta=siteinfo
如果这里也出现curl error 60,说明是系统证书信任的问题,回到步骤2解决;如果能正常返回JSON格式的站点信息,那就是Parsoid或MediaWiki的配置问题,再检查前面的配置项。
内容的提问来源于stack exchange,提问作者praetorianer777

