private void applyTlsConfig(final HttpServerOptions httpServerOptions) {
    final Optional<TlsConfiguration> maybeTlsConfig = config.getTlsConfiguration();
    if (maybeTlsConfig.isPresent()) {
      final TlsConfiguration tlsConfiguration = maybeTlsConfig.get();
      try {
        httpServerOptions
            .setSsl(true)
            .setPfxKeyCertOptions(
                new PfxOptions()
                    .setPath(tlsConfiguration.getKeyStorePath().toString())
                    .setPassword(tlsConfiguration.getKeyStorePassword()))
            .setUseAlpn(true);

        tlsConfiguration
            .getSecureTransportProtocols()
            .ifPresent(httpServerOptions::setEnabledSecureTransportProtocols);

        tlsConfiguration
            .getCipherSuites()
            .ifPresent(
                cipherSuites -> {
                  for (String cs : cipherSuites) {
                    httpServerOptions.addEnabledCipherSuite(cs);
                  }
                });

        tlsConfiguration
            .getClientAuthConfiguration()
            .ifPresent(
                clientAuthConfiguration ->
                    applyTlsClientAuth(clientAuthConfiguration, httpServerOptions));
      } catch (final RuntimeException re) {
        throw new JsonRpcServiceException(
            String.format(
                "TLS options failed to initialize for Ethereum JSON-RPC listener: %s",
                re.getMessage()));
      }
    }
  }
Construct a EngineJsonRpcService to handle either http or websocket clients

@param vertx The vertx process that will be running this service
@param dataDir The data directory where requests can be buffered
@param config Configuration for the rpc methods being loaded
@param metricsSystem The metrics service that activities should be reported to
@param natService The NAT environment manager.
@param methods The json rpc methods that should be enabled
@param maybeSockets websocket configuration to use
@param scheduler for managing ETH tasks
@param authenticationService used to grant or deny access to methods served
@param livenessService A service responsible for reporting whether this node is live
@param readinessService A service responsible for reporting whether this node has fully started
ethereum/api/src/main/java/org/hyperledger/besu/ethereum/api/jsonrpc/EngineJsonRpcService.java