我正在尝试使用 apache 在 Ubuntu 上运行用 asp.net 编写的 REST api。它在 HTTP 上按预期运行,但当我切换到 HTTPS 时,它不起作用。
在 Firefox 中,我收到 SSL_ERROR_NO_CYPHER_OVERLAP。
跑步
curl https://api.objectdb.wexosmk.xyz
,我明白了
curl: (35) OpenSSL/3.0.13: error:0A000410:SSL routines::sslv3 alert handshake failure
在 DNS 记录中,Cloudflare 表示该主机名未包含在证书中。
我有其他子域的工作证书(例如https://objectdb.wexosmk.xyz),因此这是此应用程序的特定问题。
我用
certbot -d api.objectdb.wexosmk.xyz
生成了证书。
HTTP 虚拟主机如下所示:
<VirtualHost *:80>
ServerName api.objectdb.wexosmk.xyz
ServerAdmin ...
ProxyPreserveHost On
ProxyPass / http://localhost:6500/
ProxyPassReverse / http://localhost:6500/
ErrorLog ${APACHE_LOG_DIR}/object-db-api-error.log
CustomLog ${APACHE_LOG_DIR}/object-db-api-access.log combine
RewriteEngine on
RewriteCond %{SERVER_NAME} =api.objectdb.wexosmk.xyz
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
HTTPS 虚拟主机如下所示(由 certbot 生成):
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName api.objectdb.wexosmk.xyz
ServerAdmin ...
ProxyPreserveHost On
ProxyPass / http://localhost:6500/
ProxyPassReverse / http://localhost:6500/
ErrorLog ${APACHE_LOG_DIR}/object-db-error.log
CustomLog ${APACHE_LOG_DIR}/object-db-access.log combine
RewriteEngine On
SSLCertificateFile /etc/letsencrypt/live/api.objectdb.wexosmk.xyz/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/api.objectdb.wexosmk.xyz/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
我还尝试将以下几行添加到 HTTPS 虚拟主机,但没有成功:
ProxyRequests Off
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
也许是 asp.net 应用程序的问题?
显然我的问题与多级子域有关。使用
api.wexosmk.xyz
代替 api.objectdb.wexosmk.xyz
效果很好。