Vraag Automatisch doorsturen naar https met Spring Boot


Hoe kan ik de ingebedde tomcat-server eenvoudig configureren om al het http-verkeer om te leiden naar https? Ik heb Spring Boot op een ec2-instantie die achter een elastische load-balancer zit. Ik heb de ELB geconfigureerd om ssl voor mij af te handelen (wat geweldig is) en het zet de header X-FORWARDED-PROTO op "https". Ik wil detecteren wanneer dat niet is ingesteld en de gebruiker omleiden om hen te dwingen https te gebruiken als ze dat nog niet zijn.

Tot dusver heb ik geprobeerd zonder succes het volgende toe te voegen aan mijn application.properties-bestand:

server.tomcat.protocol-header=x-forwarded-proto
security.require-ssl=true

12
2018-03-25 04:52


oorsprong


antwoorden:


Mijn antwoord is een beetje laat, maar ik had onlangs dit probleem en wil een oplossing plaatsen die voor mij werkte.

Oorspronkelijk dacht ik dat het instellen van tomcat voor het gebruik van de X-Forwarded headers zou volstaan, maar de RemoteIPValve van Tomcat, die normaal gesproken deze case zou behandelen, werkte niet voor mij.

Mijn oplossing was om een ​​EmbeddedServletContainerCustomizer toe te voegen en een ConnectorCustomizer toe te voegen: (merk op dat ik hier Tomcat 8 gebruik)

    @Component
public class TomcatContainerCustomizer implements EmbeddedServletContainerCustomizer {

    private static final Logger LOGGER = LoggerFactory.getLogger(TomcatContainerCustomizer.class);

    @Override
    public void customize(final ConfigurableEmbeddedServletContainer container) {
        if (container instanceof TomcatEmbeddedServletContainerFactory) {
                final TomcatEmbeddedServletContainerFactory tomcat = (TomcatEmbeddedServletContainerFactory) container;
                tomcat.addConnectorCustomizers(connector -> { 
                    connector.setScheme("https");
                    connector.setProxyPort(443);
                });
                LOGGER.info("Enabled secure scheme (https).");
        } else {
            LOGGER.warn("Could not change protocol scheme because Tomcat is not used as servlet container.");
        }
    }
}

Het belangrijkste is dat u niet alleen het schema instelt op https, maar ook de ProxyPort, zonder dat alle interne doorverwijzingen van Spring Boot naar poort 80 zijn gerouteerd.

Hope that helps :-)


8
2017-08-26 07:18



U hebt een keystore-bestand en enkele configuratieklassen nodig.

De onderstaande link legt het in detail uit.

Https op ingesloten tomcat


1
2018-05-24 23:48



De configuratie-eigenschap security.require-ssl werkt niet als standaardverificatie is uitgeschakeld (in ieder geval bij oude versies van Spring Boot). Dus je moet waarschijnlijk alle verzoeken handmatig beveiligen met dezelfde code als deze:

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Inject private SecurityProperties securityProperties;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        if (securityProperties.isRequireSsl()) http.requiresChannel().anyRequest().requiresSecure();
    }
}

Je kunt hier mijn volledige antwoord bekijken: Spring Boot leidt HTTP om naar HTTPS


1
2018-06-02 00:56