当前位置: 首页 > 知识库问答 >
问题:

Spring Boot Jetty SSL端口

曹超
2023-03-14

我如何配置Spring Boot运行码头与HTTPS港在443?该配置还应该负责生成密钥。

简而言之,以下maven插件的等效配置:-

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>keytool-maven-plugin</artifactId>
  <version>1.3</version>
  <executions>
    <execution>
      <phase>generate-resources</phase>
      <id>clean</id>
      <goals>
        <goal>clean</goal>
      </goals>
    </execution>
    <execution>
      <phase>generate-resources</phase>
      <id>genkey</id>
      <goals>
        <goal>generateKeyPair</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <keystore>${project.build.directory}/jetty-ssl.keystore</keystore>
    <dname>cn=my.hostname.tld</dname>
    <!-- put your CN here -->
    <keypass>jetty6</keypass>
    <storepass>jetty6</storepass>
    <alias>jetty6</alias>
    <keyalg>RSA</keyalg>
  </configuration>
</plugin>

和:-

<plugin>
  <groupId>org.mortbay.jetty</groupId>
  <artifactId>maven-jetty-plugin</artifactId>
  <version>6.1.26</version>
  <configuration>
    <jvmArgs>-Xmx2048m -Xms1536m -XX:PermSize=128m -XX:MaxPermSize=256m</jvmArgs>
    <!-- http://docs.codehaus.org/display/JETTY/Maven+Jetty+Plugin -->
    <scanIntervalSeconds>10</scanIntervalSeconds>
    <connectors>
      <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
        <port>9999</port>
        <maxIdleTime>60000</maxIdleTime>
      </connector>
      <connector implementation="org.mortbay.jetty.security.SslSocketConnector">
        <port>9993</port>
        <maxIdleTime>60000</maxIdleTime>
        <keystore>${project.build.directory}/jetty-ssl.keystore</keystore>
        <password>jetty6</password>
        <keyPassword>jetty6</keyPassword>
      </connector>
    </connectors>
    <contextPath>/</contextPath>
  </configuration>
</plugin>

共有3个答案

尹雅健
2023-03-14

要将SSL连接器添加到Jetty,您需要在应用程序的配置中声明一个EmbeddedServletContainerCustomizerbean。这将最终使您能够访问Jetty服务器实例,您可以在其中使用Jetty的API进行所需的配置更改。类似于此:

@Bean
public EmbeddedServletContainerCustomizer servletContainerCustomizer() {
    return new EmbeddedServletContainerCustomizer() {

        @Override
        public void customize(ConfigurableEmbeddedServletContainer container) {
            if (container instanceof JettyEmbeddedServletContainerFactory) {
                customizeJetty((JettyEmbeddedServletContainerFactory) container);
            }
        }

        private void customizeJetty(JettyEmbeddedServletContainerFactory factory) {
            factory.addServerCustomizers(new JettyServerCustomizer() {

                @Override
                public void customize(Server server) {
                    SslContextFactory sslContextFactory = new SslContextFactory();
                    sslContextFactory.setKeyStorePassword("jetty6");
                    try {
                        sslContextFactory.setKeyStorePath(ResourceUtils.getFile(
                                "classpath:jetty-ssl.keystore").getAbsolutePath());
                    }
                    catch (FileNotFoundException ex) {
                        throw new IllegalStateException("Could not load keystore", ex);
                    }
                    SslSocketConnector sslConnector = new SslSocketConnector(
                            sslContextFactory);
                    sslConnector.setPort(9993);
                    sslConnector.setMaxIdleTime(60000);
                    server.addConnector(sslConnector);
                }
            });
        }
    };
}

Spring Boot中不支持自动生成密钥库。为此,我会继续使用keytools Maven插件。

海嘉赐
2023-03-14

我找到了这个解决方案。对我来说很好。这种方法可以支持HTTP和HTTPS。

@Component
public EmbeddedServletContainerCustomizer servletContainerCustomizer() {
    return new EmbeddedServletContainerCustomizer() {

        @Override
        public void customize(ConfigurableEmbeddedServletContainer container) {
            if (container instanceof JettyEmbeddedServletContainerFactory) {
                customizeJetty((JettyEmbeddedServletContainerFactory) container);
            }
        }

        private void customizeJetty(JettyEmbeddedServletContainerFactory container) {

    container.addServerCustomizers(new JettyServerCustomizer() {

        @Override
        public void customize(Server server) {

            // HTTP
            ServerConnector connector = new ServerConnector(server);
            connector.setPort(requestHttpPort());

            // HTTPS
            SslContextFactory sslContextFactory = new SslContextFactory();
            sslContextFactory.setKeyStorePath("mykeystore.jks");
            sslContextFactory.setKeyStorePassword("1234");

            HttpConfiguration https = new HttpConfiguration();
            https.addCustomizer(new SecureRequestCustomizer());

            ServerConnector sslConnector = new ServerConnector(
                    server,
                    new SslConnectionFactory(sslContextFactory, HttpVersion.HTTP_1_1.asString()),
                    new HttpConnectionFactory(https));
            sslConnector.setPort(requestHttpsPort());

            server.setConnectors(new Connector[] { connector, sslConnector });

        }
    });
}
南门正业
2023-03-14

从Spring Boot 1.1.7开始,您可以配置Jetty和Tomcat通过属性文件中的三个属性使用SSL,如Spring Boot文档所示

通过这些属性配置SSL将启用HTTPS和禁用HTTP,因为仅使用属性文件不允许两者都使用。如果您想同时提供这两种服务,Spring建议您通过属性配置HTTPS(SSL),并以编程方式配置HTTP。

 类似资料:
  • 边的起点和终点 在我们继续讨论布局的相对方向和绝对方向之前,我们先来看一看节点的端口数目和边的条数; .................................................. : : : : : : : : : 0,0 :north,0:north,1: 3,0 : 4,0 : 5,0 : 6,

  • 我在不同的端口(80008001)上运行后端和前端,无法从express服务器生成res.redirect(…),并且浏览器显示CORS错误(访问XMLHttpRequest at…)。 这是MEVN(Mongo,Express,Vue,Nodejs)应用程序,Vue前端和Express(nodejs)后端在不同的端口上运行。我在后端实现了cors(),它使我的前端可以发出请求(get,post)

  • 主要内容:查询系统中已经启动的服务服务是给系统提供功能的,在系统中除了有系统服务,还有网络服务。而每个网络服务都有自己的端口,一般端口号都是固定的。那么,什么是端口呢? 我们知道,IP 地址是计算机在互联网上的地址编号,每台联网的计算机都必须有自己的 IP 地址,而且必须是唯一的,这样才能正常通信。也就是说,在互联网上是通过 IP 地址来确定不同计算机的位置的。 大家可以把 IP 地址想象成家庭的"门牌号码",不管你住的是大杂院、

  • 问题内容: 我使用nodejs(net module )在客户端和服务器之间创建了tcp连接。服务器正在侦听已经预定义的端口,而客户端正在连接到该端口。 据我了解,客户端的端口是由节点动态分配的?那是对的吗? 哪种算法节点用于为客户端分配“随机”端口?它是如何工作的,是由节点还是由操作系统决定的? 是否可以定义将要使用哪个客户端的静态端口?是否可以定义供客户端使用的端口范围? 注意:我想我之前在找

  • http/https 端口与 ws端口 冲突吗?

  • 后端 这是来自领域设置

  • 端口转发(Forwarded Port)。请求访问主机(你的电脑)上的某个端口,把请求转发到虚拟机上的某个端口。比如你在虚拟机上安装了一个 Web 服务器,默认它会在虚拟机上的 80 端口提供接待服务。你可以配置一个端口转发,当访问主机上的某个端口的时候,把请求转发到虚拟机上的 80 端口。下面通过一个试验你就很容易理解这个端口转发。 端口转发配置 打开 Vagrantfile,添加一行配置代码:

  • 该功能可以对您应用开放的端口进行一个调整。 该功能对容器开放的端口进行调整,初始化完之后尽量不动。因为它可能关联问Service、Deployment、Ingress、VirtualService等资源。