Search in sources :

Example 11 with PemTrustOptions

use of io.vertx.core.net.PemTrustOptions in project vertx-web by vert-x3.

the class StaticHandlerTest method testHttp2Push.

@Test
public void testHttp2Push() throws Exception {
    List<Http2PushMapping> mappings = new ArrayList<>();
    mappings.add(new Http2PushMapping("style.css", "style", false));
    mappings.add(new Http2PushMapping("coin.png", "image", false));
    stat.setHttp2PushMapping(mappings).setWebRoot("webroot/somedir3");
    router.route().handler(stat);
    HttpServer http2Server = vertx.createHttpServer(new HttpServerOptions().setUseAlpn(true).setSsl(true).setPemKeyCertOptions(new PemKeyCertOptions().setKeyPath("tls/server-key.pem").setCertPath("tls/server-cert.pem")));
    http2Server.requestHandler(router).listen(8443);
    HttpClientOptions options = new HttpClientOptions().setSsl(true).setUseAlpn(true).setProtocolVersion(HttpVersion.HTTP_2).setPemTrustOptions(new PemTrustOptions().addCertPath("tls/server-cert.pem"));
    HttpClient client = vertx.createHttpClient(options);
    HttpClientRequest request = client.get(8443, "localhost", "/testLinkPreload.html", resp -> {
        assertEquals(200, resp.statusCode());
        assertEquals(HttpVersion.HTTP_2, resp.version());
        resp.bodyHandler(this::assertNotNull);
    });
    CountDownLatch latch = new CountDownLatch(2);
    request.pushHandler(pushedReq -> pushedReq.handler(pushedResp -> {
        assertNotNull(pushedResp);
        pushedResp.bodyHandler(this::assertNotNull);
        latch.countDown();
    }));
    request.end();
    latch.await();
}
Also used : Arrays(java.util.Arrays) Date(java.util.Date) HttpServer(io.vertx.core.http.HttpServer) Router(io.vertx.ext.web.Router) AtomicReference(java.util.concurrent.atomic.AtomicReference) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) HttpClientRequest(io.vertx.core.http.HttpClientRequest) Utils(io.vertx.ext.web.impl.Utils) HttpVersion(io.vertx.core.http.HttpVersion) PemKeyCertOptions(io.vertx.core.net.PemKeyCertOptions) HttpClientOptions(io.vertx.core.http.HttpClientOptions) PemTrustOptions(io.vertx.core.net.PemTrustOptions) WebTestBase(io.vertx.ext.web.WebTestBase) DateFormat(java.text.DateFormat) Set(java.util.Set) Test(org.junit.Test) File(java.io.File) JsonArray(io.vertx.core.json.JsonArray) CountDownLatch(java.util.concurrent.CountDownLatch) List(java.util.List) Http2PushMapping(io.vertx.ext.web.Http2PushMapping) HttpMethod(io.vertx.core.http.HttpMethod) HttpServerOptions(io.vertx.core.http.HttpServerOptions) HttpClient(io.vertx.core.http.HttpClient) HttpClientRequest(io.vertx.core.http.HttpClientRequest) PemKeyCertOptions(io.vertx.core.net.PemKeyCertOptions) Http2PushMapping(io.vertx.ext.web.Http2PushMapping) HttpClient(io.vertx.core.http.HttpClient) ArrayList(java.util.ArrayList) HttpServer(io.vertx.core.http.HttpServer) HttpServerOptions(io.vertx.core.http.HttpServerOptions) CountDownLatch(java.util.concurrent.CountDownLatch) PemTrustOptions(io.vertx.core.net.PemTrustOptions) HttpClientOptions(io.vertx.core.http.HttpClientOptions) Test(org.junit.Test)

Example 12 with PemTrustOptions

use of io.vertx.core.net.PemTrustOptions in project enmasse-workshop by EnMasseProject.

the class AmqpClient method connect.

@Override
public void connect(String username, String password, Handler<AsyncResult<Client>> connectHandler) {
    this.client = ProtonClient.create(vertx);
    ProtonClientOptions options = new ProtonClientOptions();
    if (this.serverCert != null && !this.serverCert.isEmpty()) {
        options.setSsl(true).setHostnameVerificationAlgorithm("").setPemTrustOptions(new PemTrustOptions().addCertPath(this.serverCert));
    }
    this.client.connect(options, this.hostname, this.port, username, password, done -> {
        if (done.succeeded()) {
            log.info("Connected to {}:{}", this.hostname, this.port);
            this.connection = done.result();
            this.connection.open();
            if (this.senders != null) {
                this.senders.clear();
            } else {
                this.senders = new HashMap<>();
            }
            if (this.receivers != null) {
                this.receivers.clear();
            } else {
                this.receivers = new HashMap<>();
            }
            connectHandler.handle(Future.succeededFuture(this));
        } else {
            log.error("Error connecting to the service", done.cause());
            connectHandler.handle(Future.failedFuture(done.cause()));
        }
    });
}
Also used : ProtonClientOptions(io.vertx.proton.ProtonClientOptions) PemTrustOptions(io.vertx.core.net.PemTrustOptions)

Example 13 with PemTrustOptions

use of io.vertx.core.net.PemTrustOptions in project gravitee-gateway by gravitee-io.

the class HttpEndpointRuleHandler method handle.

@Override
public void handle(Long timer) {
    HttpEndpoint endpoint = (HttpEndpoint) rule.endpoint();
    logger.debug("Running health-check for endpoint: {} [{}]", endpoint.getName(), endpoint.getTarget());
    // Run request for each step
    for (io.gravitee.definition.model.services.healthcheck.Step step : rule.steps()) {
        try {
            URI hcRequestUri = create(endpoint.getTarget(), step.getRequest());
            // Prepare HTTP client
            HttpClientOptions httpClientOptions = new HttpClientOptions().setMaxPoolSize(1).setKeepAlive(false).setTcpKeepAlive(false);
            if (endpoint.getHttpClientOptions() != null) {
                httpClientOptions.setIdleTimeout((int) (endpoint.getHttpClientOptions().getIdleTimeout() / 1000)).setConnectTimeout((int) endpoint.getHttpClientOptions().getConnectTimeout()).setTryUseCompression(endpoint.getHttpClientOptions().isUseCompression());
            }
            // Configure HTTP proxy
            HttpProxy proxy = endpoint.getHttpProxy();
            if (proxy != null && proxy.isEnabled()) {
                ProxyOptions proxyOptions = new ProxyOptions().setHost(proxy.getHost()).setPort(proxy.getPort()).setUsername(proxy.getUsername()).setPassword(proxy.getPassword()).setType(ProxyType.valueOf(proxy.getType().name()));
                httpClientOptions.setProxyOptions(proxyOptions);
            }
            // Configure TLS if required
            HttpClientSslOptions sslOptions = endpoint.getHttpClientSslOptions();
            if (sslOptions != null && sslOptions.isEnabled()) {
                httpClientOptions.setSsl(sslOptions.isEnabled()).setVerifyHost(sslOptions.isHostnameVerifier()).setTrustAll(sslOptions.isTrustAll());
                if (sslOptions.getPem() != null && !sslOptions.getPem().isEmpty()) {
                    httpClientOptions.setPemTrustOptions(new PemTrustOptions().addCertValue(io.vertx.core.buffer.Buffer.buffer(sslOptions.getPem())));
                }
            } else if (HTTPS_SCHEME.equalsIgnoreCase(hcRequestUri.getScheme())) {
                // SSL is not configured but the endpoint scheme is HTTPS so let's enable the SSL on Vert.x HTTP client
                // automatically
                httpClientOptions.setSsl(true).setTrustAll(true);
            }
            HttpClient httpClient = vertx.createHttpClient(httpClientOptions);
            final int port = hcRequestUri.getPort() != -1 ? hcRequestUri.getPort() : (HTTPS_SCHEME.equals(hcRequestUri.getScheme()) ? 443 : 80);
            String relativeUri = (hcRequestUri.getRawQuery() == null) ? hcRequestUri.getRawPath() : hcRequestUri.getRawPath() + '?' + hcRequestUri.getRawQuery();
            // Run health-check
            HttpClientRequest healthRequest = httpClient.request(HttpMethod.valueOf(step.getRequest().getMethod().name().toUpperCase()), port, hcRequestUri.getHost(), relativeUri);
            // Set timeout on request
            if (endpoint.getHttpClientOptions() != null) {
                healthRequest.setTimeout(endpoint.getHttpClientOptions().getReadTimeout());
            }
            // Prepare request
            if (step.getRequest().getHeaders() != null) {
                step.getRequest().getHeaders().forEach(httpHeader -> healthRequest.headers().set(httpHeader.getName(), httpHeader.getValue()));
            }
            final EndpointStatus.Builder healthBuilder = EndpointStatus.forEndpoint(rule.api(), endpoint.getName()).on(System.currentTimeMillis());
            long startTime = System.currentTimeMillis();
            Request request = new Request();
            request.setMethod(step.getRequest().getMethod());
            request.setUri(hcRequestUri.toString());
            healthRequest.handler(response -> response.bodyHandler(buffer -> {
                long endTime = System.currentTimeMillis();
                logger.debug("Health-check endpoint returns a response with a {} status code", response.statusCode());
                String body = buffer.toString();
                EndpointStatus.StepBuilder stepBuilder = validateAssertions(step, new EvaluableHttpResponse(response, body));
                stepBuilder.request(request);
                stepBuilder.responseTime(endTime - startTime);
                Response healthResponse = new Response();
                healthResponse.setStatus(response.statusCode());
                // If validation fail, store request and response data
                if (!stepBuilder.isSuccess()) {
                    request.setBody(step.getRequest().getBody());
                    if (step.getRequest().getHeaders() != null) {
                        HttpHeaders reqHeaders = new HttpHeaders();
                        step.getRequest().getHeaders().forEach(httpHeader -> reqHeaders.put(httpHeader.getName(), Collections.singletonList(httpHeader.getValue())));
                        request.setHeaders(reqHeaders);
                    }
                    // Extract headers
                    HttpHeaders headers = new HttpHeaders();
                    response.headers().names().forEach(headerName -> headers.put(headerName, response.headers().getAll(headerName)));
                    healthResponse.setHeaders(headers);
                    // Store body
                    healthResponse.setBody(body);
                }
                stepBuilder.response(healthResponse);
                // Append step stepBuilder
                healthBuilder.step(stepBuilder.build());
                report(healthBuilder.build());
                // Close client
                httpClient.close();
            }));
            healthRequest.exceptionHandler(event -> {
                long endTime = System.currentTimeMillis();
                EndpointStatus.StepBuilder stepBuilder = EndpointStatus.forStep(step.getName());
                stepBuilder.fail(event.getMessage());
                Response healthResponse = new Response();
                // Extract request information
                request.setBody(step.getRequest().getBody());
                if (step.getRequest().getHeaders() != null) {
                    HttpHeaders reqHeaders = new HttpHeaders();
                    step.getRequest().getHeaders().forEach(httpHeader -> reqHeaders.put(httpHeader.getName(), Collections.singletonList(httpHeader.getValue())));
                    request.setHeaders(reqHeaders);
                }
                if (event instanceof ConnectTimeoutException) {
                    stepBuilder.fail(event.getMessage());
                    healthResponse.setStatus(HttpStatusCode.REQUEST_TIMEOUT_408);
                } else {
                    healthResponse.setStatus(HttpStatusCode.SERVICE_UNAVAILABLE_503);
                }
                Step result = stepBuilder.build();
                result.setResponse(healthResponse);
                result.setRequest(request);
                result.setResponseTime(endTime - startTime);
                // Append step result
                healthBuilder.step(result);
                report(healthBuilder.build());
                try {
                    // Close client
                    httpClient.close();
                } catch (IllegalStateException ise) {
                // Do not take care about exception when closing client
                }
            });
            // Send request
            logger.debug("Execute health-check request: {}", healthRequest);
            if (step.getRequest().getBody() != null && !step.getRequest().getBody().isEmpty()) {
                healthRequest.end(step.getRequest().getBody());
            } else {
                healthRequest.end();
            }
        } catch (Exception ex) {
            logger.error("An unexpected error occurs", ex);
        }
    }
}
Also used : Step(io.gravitee.reporter.api.health.Step) HttpHeaders(io.gravitee.common.http.HttpHeaders) URISyntaxException(java.net.URISyntaxException) LoggerFactory(org.slf4j.LoggerFactory) EndpointStatus(io.gravitee.reporter.api.health.EndpointStatus) HttpStatusCode(io.gravitee.common.http.HttpStatusCode) EvaluationException(io.gravitee.gateway.services.healthcheck.eval.EvaluationException) HttpClientSslOptions(io.gravitee.definition.model.HttpClientSslOptions) HttpClientRequest(io.vertx.core.http.HttpClientRequest) Response(io.gravitee.reporter.api.common.Response) HttpEndpoint(io.gravitee.definition.model.endpoint.HttpEndpoint) EndpointRule(io.gravitee.gateway.services.healthcheck.EndpointRule) EndpointStatusDecorator(io.gravitee.gateway.services.healthcheck.EndpointStatusDecorator) HttpClientOptions(io.vertx.core.http.HttpClientOptions) URI(java.net.URI) PemTrustOptions(io.vertx.core.net.PemTrustOptions) Request(io.gravitee.reporter.api.common.Request) ProxyOptions(io.vertx.core.net.ProxyOptions) Logger(org.slf4j.Logger) ConnectTimeoutException(io.netty.channel.ConnectTimeoutException) Iterator(java.util.Iterator) HttpProxy(io.gravitee.definition.model.HttpProxy) Vertx(io.vertx.core.Vertx) EvaluableHttpResponse(io.gravitee.gateway.services.healthcheck.http.el.EvaluableHttpResponse) ProxyType(io.vertx.core.net.ProxyType) AssertionEvaluation(io.gravitee.gateway.services.healthcheck.eval.assertion.AssertionEvaluation) HttpMethod(io.vertx.core.http.HttpMethod) Pattern(java.util.regex.Pattern) Handler(io.vertx.core.Handler) Collections(java.util.Collections) HttpClient(io.vertx.core.http.HttpClient) HttpHeaders(io.gravitee.common.http.HttpHeaders) ProxyOptions(io.vertx.core.net.ProxyOptions) Step(io.gravitee.reporter.api.health.Step) URI(java.net.URI) HttpClientOptions(io.vertx.core.http.HttpClientOptions) HttpClientRequest(io.vertx.core.http.HttpClientRequest) Request(io.gravitee.reporter.api.common.Request) HttpClientSslOptions(io.gravitee.definition.model.HttpClientSslOptions) EvaluableHttpResponse(io.gravitee.gateway.services.healthcheck.http.el.EvaluableHttpResponse) HttpEndpoint(io.gravitee.definition.model.endpoint.HttpEndpoint) PemTrustOptions(io.vertx.core.net.PemTrustOptions) HttpEndpoint(io.gravitee.definition.model.endpoint.HttpEndpoint) URISyntaxException(java.net.URISyntaxException) EvaluationException(io.gravitee.gateway.services.healthcheck.eval.EvaluationException) ConnectTimeoutException(io.netty.channel.ConnectTimeoutException) HttpProxy(io.gravitee.definition.model.HttpProxy) EndpointStatus(io.gravitee.reporter.api.health.EndpointStatus) Response(io.gravitee.reporter.api.common.Response) EvaluableHttpResponse(io.gravitee.gateway.services.healthcheck.http.el.EvaluableHttpResponse) HttpClientRequest(io.vertx.core.http.HttpClientRequest) HttpClient(io.vertx.core.http.HttpClient) ConnectTimeoutException(io.netty.channel.ConnectTimeoutException)

Aggregations

PemTrustOptions (io.vertx.core.net.PemTrustOptions)13 Test (org.junit.Test)7 HttpClient (io.vertx.core.http.HttpClient)3 HttpClientOptions (io.vertx.core.http.HttpClientOptions)3 HttpClientRequest (io.vertx.core.http.HttpClientRequest)3 HttpMethod (io.vertx.core.http.HttpMethod)3 JsonArray (io.vertx.core.json.JsonArray)3 JsonObject (io.vertx.core.json.JsonObject)3 HttpClientSslOptions (io.gravitee.definition.model.HttpClientSslOptions)2 HttpProxy (io.gravitee.definition.model.HttpProxy)2 HttpServer (io.vertx.core.http.HttpServer)2 HttpServerOptions (io.vertx.core.http.HttpServerOptions)2 HttpVersion (io.vertx.core.http.HttpVersion)2 PemKeyCertOptions (io.vertx.core.net.PemKeyCertOptions)2 Http2PushMapping (io.vertx.ext.web.Http2PushMapping)2 Router (io.vertx.ext.web.Router)2 WebTestBase (io.vertx.ext.web.WebTestBase)2 Utils (io.vertx.ext.web.impl.Utils)2 MqttClientOptions (io.vertx.mqtt.MqttClientOptions)2 File (java.io.File)2