gpt4 book ai didi

java - Spring Boot + Apache 反向代理 : This combination of host and port requires TLS

转载 作者:行者123 更新时间:2023-12-04 22:41:14 29 4
gpt4 key购买 nike

我有的:

  • 我有一个 Spring Boot 应用程序作为私有(private)注册表中的 docker 镜像
  • 来自 Let's Encrypt
  • 的 SSL 证书

    我运行了这个命令:
  • wget https://dl.eff.org/certbot-auto (获取证书机器人)
  • chmod a+x certbot-auto (使其执行)
  • ./certbot-auto (运行)
  • openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out keystore.p12 -name tomcat -CAfile chain.pem -caname root (转换为 Spring Boot 兼容 key )

  • 在我的 Spring Boot 应用程序中,我将此条目添加到属性中:
    security.require-ssl=true
    server.ssl.key-store={key_store_location}
    server.ssl.key-store-password={key_store_password}
    server.ssl.keyStoreType=PKCS12
    server.ssl.keyAlias=tomcat

    此时我可以通过以下方式访问我的应用程序: https://example.com:8080/并且证书有效。

    然后我这样做:
    我的 /etc/apache2/sites-enabled/000-default.conf文件如下所示:
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}


    ServerAdmin webmaster@localhost
    ServerName {domain}

    SSLEngine on
    SSLProxyEngine On
    SSLProtocol All -SSLv2 -SSLv3 # Disable SSL versions with POODLE vulnerability

    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem

    ProxyRequests Off
    ProxyPreserveHost On
    ProxyPass / https://localhost:8080/
    ProxyPassReverse / https://localhost:8080/

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    在我启动 apache2 并打开 https://example.com/ 之后我明白了
    Bad Request
    This combination of host and port requires TLS.

    但是,如果我输入 https://example.com:80/一切正常。

    所以我的问题是:我需要做什么才能摆脱端口并获得 https://example.com/去工作?

    谢谢你。

    编辑:按照建议添加 443 后,问题仍然存在相同的错误。

    完整的配置文件:
    <VirtualHost *:80>
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

    ServerAdmin webmaster@localhost
    ServerName example.com

    SSLEngine on
    SSLProxyEngine On
    SSLProtocol All -SSLv2 -SSLv3

    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem

    ProxyRequests Off
    ProxyPreserveHost On
    ProxyPass / https://localhost:8080/
    ProxyPassReverse / https://localhost:8080/


    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>
    # vim: syntax=apache ts=4 sw=4 sts=4 sr noet

    <VirtualHost *:443>
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

    ServerAdmin webmaster@localhost
    ServerName example.com

    SSLEngine on
    SSLProxyEngine On
    SSLProtocol All -SSLv2 -SSLv3

    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem

    ProxyRequests Off
    ProxyPreserveHost On
    ProxyPass / https://localhost:8080/
    ProxyPassReverse / https://localhost:8080/

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>

    最佳答案

    默认 Https 端口是 443。您能否为 443 创建 SSL VirtualHost 并在 VirtualHost 中添加所有条目并进行测试。

    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
    Listen 443 https
    <VirtualHost Apache-IP:443>
    ServerAdmin webmaster@localhost
    ServerName {domain}

    SSLEngine on
    SSLProxyEngine On
    SSLProtocol All -SSLv2 -SSLv3 # Disable SSL versions with POODLE vulnerability

    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem

    ProxyRequests Off
    ProxyPreserveHost On
    ProxyPass / https://localhost:8080/
    ProxyPassReverse / https://localhost:8080/

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    </VirtualHost>

    关于java - Spring Boot + Apache 反向代理 : This combination of host and port requires TLS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62278682/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com