所以我无法解决这个问题,并且在网上搜索了所有地方但没有找到任何可行的解决方案。
1.1. 我有一个作为虚拟主机运行的 apache 服务器。在初始情况下,它监听端口 80,与我的域 example.com 绑定,一切正常。(使用 HTTP://example.com)
1.2. 在同一台机器上,我在端口 4000 上运行了一个 API。我的前端网站尝试从该 API 获取 GET,并使用 HTTP://example.com:4000/api/ 调用它。同样,这里一切正常,API 加载了页面上应有的数据。
2.1. 现在我为我的域名配置了 SSL。从 ZeroSSL 获得证书,将提供的 3 个文件/密钥包含到我的虚拟主机的 apache 配置文件中,一切顺利,现在 HTTPS://example.com 可以顺利安全地加载,现在从端口 443 加载,“显然”。因此,基本的 SSL 配置和证书应该没问题!
2.2. 现在问题来了。最初,我现在受保护的页面试图从不受保护的 HTTP(HTTP://example.com:4000/api/)加载我的 api,这在我的 HTTPS 页面上肯定不起作用(从安全角度来看没有任何意义)。由于我的 SSL 证书通常对整个域 example.com 有效,我尝试将 GET 更改为指向 HTTP年代://example.com:4000/api/,但此时我尝试加载页面时收到 ERR_SSL_PROTOCOL_ERROR(使用 HTTPS://example.com)
我读过关于使用 ReverseProxy 的内容,或者为该端口设置另一个虚拟主机并在其中包含 SSL 配置,但此时我的菜鸟身份阻碍了我。此时我的网站出现错误 404(这仅是我在 example.com.conf 中保留“ProxyPass”行时才导致的)。如果没有 ProxyPass,我仍然会遇到 ERR_SSL_PROTOCOL_ERROR。以下是我的 apache enabled-sites 配置:
例如.com.conf
<VirtualHost *:443>
ServerAdmin webmaster@localhost
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://SERVER_LOCAL_IP:4000
ProxyPassReverse / http://SERVER_LOCAL_IP:4000
SSLEngine on
SSLCertificateFile /var/www/example.com/ssl/certificate.crt
SSLCertificateKeyFile /var/www/example.com/ssl/private.key
SSLCertificateChainFile /var/www/example.com/ssl/ca_bundle.crt
</VirtualHost>
api.conf--(这是我在收到 ERR_SSL_PROTOCOL_ERROR 后创建的,但似乎没有改变任何东西)
<VirtualHost *:4000>
ServerName example.com
ServerAlias www.example.com
SSLEngine on
SSLCertificateFile /var/www/example.com/ssl/certificate.crt
SSLCertificateKeyFile /var/www/example.com/ssl/private.key
SSLCertificateChainFile /var/www/example.com/ssl/ca_bundle.crt
</VirtualHost>
因此,目前我几乎被阻止了,无法使用 SSL 来使用我的 API。有什么可以帮忙的吗?
提前致谢 !
答案1
我不会说我知道答案。不过我有几个方法你可以试试:
- 搜索 API 的名称以及术语“ERR_SSL_PROTOCOL_ERROR”,这将引导您进入一些知道您问题答案的人的论坛
- 尝试使用其他 SSL 认证,例如来自的免费认证https://letsencrypt.org/因为这些对我来说总是有用的并且没有带来任何问题