Search in sources :

Example 1 with Ssl

use of cn.taketoday.framework.web.server.Ssl in project today-infrastructure by TAKETODAY.

the class AbstractServletWebServerFactoryTests method sslSessionTracking.

@Test
void sslSessionTracking() {
    AbstractServletWebServerFactory factory = getFactory();
    Ssl ssl = new Ssl();
    ssl.setEnabled(true);
    ssl.setKeyStore("src/test/resources/test.jks");
    ssl.setKeyPassword("password");
    factory.setSsl(ssl);
    factory.getSession().setTrackingModes(EnumSet.of(SessionTrackingMode.SSL));
    AtomicReference<ServletContext> contextReference = new AtomicReference<>();
    this.webServer = factory.getWebServer(contextReference::set);
    assertThat(contextReference.get().getEffectiveSessionTrackingModes()).isEqualTo(EnumSet.of(jakarta.servlet.SessionTrackingMode.SSL));
}
Also used : ServletContext(jakarta.servlet.ServletContext) AtomicReference(java.util.concurrent.atomic.AtomicReference) Ssl(cn.taketoday.framework.web.server.Ssl) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) Test(org.junit.jupiter.api.Test)

Example 2 with Ssl

use of cn.taketoday.framework.web.server.Ssl in project today-infrastructure by TAKETODAY.

the class AbstractServletWebServerFactoryTests method sslWithCustomSslStoreProvider.

@Test
void sslWithCustomSslStoreProvider() throws Exception {
    AbstractServletWebServerFactory factory = getFactory();
    addTestTxtFile(factory);
    Ssl ssl = new Ssl();
    ssl.setClientAuth(ClientAuth.NEED);
    ssl.setKeyPassword("password");
    factory.setSsl(ssl);
    SslStoreProvider sslStoreProvider = mock(SslStoreProvider.class);
    given(sslStoreProvider.getKeyStore()).willReturn(loadStore());
    given(sslStoreProvider.getTrustStore()).willReturn(loadStore());
    factory.setSslStoreProvider(sslStoreProvider);
    this.webServer = factory.getWebServer();
    this.webServer.start();
    KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
    loadStore(keyStore, new FileSystemResource("src/test/resources/test.jks"));
    SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy()).loadKeyMaterial(keyStore, "password".toCharArray()).build());
    HttpClient httpClient = this.httpClientBuilder.get().setSSLSocketFactory(socketFactory).build();
    HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
    assertThat(getResponse(getLocalUrl("https", "/test.txt"), requestFactory)).isEqualTo("test");
    then(sslStoreProvider).should(atLeastOnce()).getKeyStore();
    then(sslStoreProvider).should(atLeastOnce()).getTrustStore();
}
Also used : SslStoreProvider(cn.taketoday.framework.web.server.SslStoreProvider) HttpClient(org.apache.http.client.HttpClient) FileSystemResource(cn.taketoday.core.io.FileSystemResource) HttpComponentsClientHttpRequestFactory(cn.taketoday.http.client.HttpComponentsClientHttpRequestFactory) Ssl(cn.taketoday.framework.web.server.Ssl) KeyStore(java.security.KeyStore) SSLConnectionSocketFactory(org.apache.http.conn.ssl.SSLConnectionSocketFactory) SSLContextBuilder(org.apache.http.ssl.SSLContextBuilder) TrustSelfSignedStrategy(org.apache.http.conn.ssl.TrustSelfSignedStrategy) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) Test(org.junit.jupiter.api.Test)

Example 3 with Ssl

use of cn.taketoday.framework.web.server.Ssl in project today-infrastructure by TAKETODAY.

the class AbstractServletWebServerFactoryTests method sslKeyAlias.

@Test
void sslKeyAlias() throws Exception {
    AbstractServletWebServerFactory factory = getFactory();
    Ssl ssl = getSsl(null, "password", "test-alias", "src/test/resources/test.jks");
    factory.setSsl(ssl);
    ServletRegistrationBean<ExampleServlet> registration = new ServletRegistrationBean<>(new ExampleServlet(true, false), "/hello");
    this.webServer = factory.getWebServer(registration);
    this.webServer.start();
    TrustStrategy trustStrategy = new SerialNumberValidatingTrustSelfSignedStrategy("3a3aaec8");
    SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, trustStrategy).build();
    HttpClient httpClient = HttpClients.custom().setSSLSocketFactory(new SSLConnectionSocketFactory(sslContext)).build();
    String response = getResponse(getLocalUrl("https", "/hello"), new HttpComponentsClientHttpRequestFactory(httpClient));
    assertThat(response).contains("scheme=https");
}
Also used : TrustStrategy(org.apache.http.ssl.TrustStrategy) SSLContext(javax.net.ssl.SSLContext) Ssl(cn.taketoday.framework.web.server.Ssl) SSLConnectionSocketFactory(org.apache.http.conn.ssl.SSLConnectionSocketFactory) ExampleServlet(cn.taketoday.test.web.servlet.ExampleServlet) ServletRegistrationBean(cn.taketoday.framework.web.servlet.ServletRegistrationBean) HttpClient(org.apache.http.client.HttpClient) HttpComponentsClientHttpRequestFactory(cn.taketoday.http.client.HttpComponentsClientHttpRequestFactory) SSLContextBuilder(org.apache.http.ssl.SSLContextBuilder) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) Test(org.junit.jupiter.api.Test)

Example 4 with Ssl

use of cn.taketoday.framework.web.server.Ssl in project today-infrastructure by TAKETODAY.

the class AbstractReactiveWebServerFactoryTests method sslWithPemCertificates.

@Test
void sslWithPemCertificates() throws Exception {
    Ssl ssl = new Ssl();
    ssl.setClientAuth(Ssl.ClientAuth.NEED);
    ssl.setCertificate("classpath:test-cert.pem");
    ssl.setCertificatePrivateKey("classpath:test-key.pem");
    ssl.setTrustCertificate("classpath:test-cert.pem");
    ssl.setKeyStorePassword("secret");
    testClientAuthSuccess(ssl, buildTrustAllSslWithClientKeyConnector("test.p12", "secret"));
}
Also used : Ssl(cn.taketoday.framework.web.server.Ssl) Test(org.junit.jupiter.api.Test)

Example 5 with Ssl

use of cn.taketoday.framework.web.server.Ssl in project today-infrastructure by TAKETODAY.

the class AbstractReactiveWebServerFactoryTests method sslNeedsClientAuthenticationFailsWithoutClientCertificate.

@Test
void sslNeedsClientAuthenticationFailsWithoutClientCertificate() {
    Ssl ssl = new Ssl();
    ssl.setClientAuth(Ssl.ClientAuth.NEED);
    ssl.setKeyStore("classpath:test.jks");
    ssl.setKeyStorePassword("secret");
    ssl.setKeyPassword("password");
    ssl.setTrustStore("classpath:test.jks");
    testClientAuthFailure(ssl, buildTrustAllSslConnector());
}
Also used : Ssl(cn.taketoday.framework.web.server.Ssl) Test(org.junit.jupiter.api.Test)

Aggregations

Ssl (cn.taketoday.framework.web.server.Ssl)72 Test (org.junit.jupiter.api.Test)58 Connector (org.apache.catalina.connector.Connector)12 SSLHostConfig (org.apache.tomcat.util.net.SSLHostConfig)10 ParameterizedTest (org.junit.jupiter.params.ParameterizedTest)10 SslStoreProvider (cn.taketoday.framework.web.server.SslStoreProvider)8 NoSuchProviderException (java.security.NoSuchProviderException)8 ServletRegistrationBean (cn.taketoday.framework.web.servlet.ServletRegistrationBean)6 HttpComponentsClientHttpRequestFactory (cn.taketoday.http.client.HttpComponentsClientHttpRequestFactory)6 ReactorClientHttpConnector (cn.taketoday.http.client.reactive.ReactorClientHttpConnector)6 ExampleServlet (cn.taketoday.test.web.servlet.ExampleServlet)6 WebClient (cn.taketoday.web.reactive.function.client.WebClient)6 KeyStore (java.security.KeyStore)6 HttpClient (org.apache.http.client.HttpClient)6 SSLConnectionSocketFactory (org.apache.http.conn.ssl.SSLConnectionSocketFactory)6 SSLContextBuilder (org.apache.http.ssl.SSLContextBuilder)6 WebServerException (cn.taketoday.framework.web.server.WebServerException)4 InetAddress (java.net.InetAddress)4 TrustSelfSignedStrategy (org.apache.http.conn.ssl.TrustSelfSignedStrategy)4 SSLHostConfigCertificate (org.apache.tomcat.util.net.SSLHostConfigCertificate)4