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

Spring Boot 2使用Webflux、Netty和HTTP2,导致证书无效,可能存在配置错误

阎雪峰
2023-03-14

关于使用HTTP2配置Netty和Webflux,我发现的信息不多。

我过去使用过类似的配置,没有使用基于reactor的Spring Boot模块,通常是Spring Bootweb。我已经在下面发布了我的步骤。

问题是SSL不能在Netty上正常工作。我需要在设置方面做更多的工作吗?希望得到一些指针或示例来理解如何正确配置它。

生成证书

>

输出:证书本地主机1。pem键本地主机1键。pem

在本地主机1中使用openssl生成密钥库:openssl pkcs12-导出。pem-inkey localhost 1键。pem-输出密钥库。p12-名称localdev

应用程序文件

<代码>应用程序。yaml

server:
  port: 8443
  shutdown: graceful
  http2:
    enabled: true
  server:
    ssl:
      enabled: true
      #format of the keystore
      key-store-type: PKCS12
      #path to the keystore containing the cert
      key-store: classpath:keystore.p12
      #pw used to gen the keystore
      key-store-password: password
      #alias mapped to the certificate inside the keystore
      key-alias: localdev

<代码>构建。格雷德尔

plugins {
    id 'org.springframework.boot' version '2.4.2'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
    id "com.google.osdetector" version "1.7.0"
}


dependencies {
    //HTTP2 Reactive Netty (auto-configured version via spring dependency BOM)
    runtimeOnly ("io.netty:netty-tcnative-boringssl-static::${osdetector.classifier}")

    implementation 'org.springframework.boot:spring-boot-starter'
    implementation 'org.springframework.boot:spring-boot-starter-data-r2dbc'  
    implementation 'org.springframework.boot:spring-boot-starter-webflux'
    implementation 'org.springframework.boot:spring-boot-starter-actuator'

    runtimeOnly 'io.micrometer:micrometer-registry-prometheus'
    runtimeOnly 'io.r2dbc:r2dbc-postgresql'

    
    testImplementation ('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
    testImplementation 'org.junit.jupiter:junit-jupiter-api'
    testImplementation 'io.projectreactor:reactor-test'
}

运行和请求

应用程序正在运行

2021-02-20 17:20:43.122  INFO 1 --- [main] o.s.b.web.embedded.netty.NettyWebServer  : Netty started on port 8443
2021-02-20 17:20:43.143  INFO 1 --- [main] d.c.test.store.Application               : Started Application in 6.655 seconds (JVM running for 7.826)

curl请求

curl --cert --http2 localhost+1.pem --key localhost+1-key.pem --insecure https://localhost:8443/actuator/health

错误响应

curl: (35) error:1400410B:SSL routines:CONNECT_CR_SRVR_HELLO:wrong version number`

执行相同的请求命令,但使用超文本传输协议返回您期望的执行器数据,因此我缺少一些基于netty反应器的配置,这是我相当新的配置。

相似问题

共有1个答案

庞旺
2023-03-14

您的应用程序。yml文件不正确。ssl属性在服务器上有效。服务器ssl而不是服务器。ssl。因此,SSL设置无效,您的服务器是HTTP服务器,而不是HTTPS服务器。这就是为什么curl与http一起工作。

要修复此问题,请删除第6行(服务器:)并向后缩进第“ssl:”行及以下内容。这将为您(例如)提供服务器。ssl。enabled=true,而不是server。服务器ssl。启用=true

 类似资料:
  • -=更新=- 我遇到的问题是,证书是有效的,但站点对证书无效。保留默认设置(提供带有证书默认设置的配置文件或使用Capybara中的标准:selenium驱动程序)对我的案例有效。我错误地认为我需要修改Firefox配置文件才能让驱动程序工作,但事实并非如此。 从自定义配置文件中删除证书设置修复了此问题。谢谢Jarib -=原问题=- 我目前正在尝试设置测试浏览器,以便在使用Cucumber和Ca

  • 问题内容: 我正在尝试从使用用户名和密码登录到我的MySQL数据库服务器的未加密JDBC连接转移到使用SSL和基于证书的身份验证的连接。我在Spring MVC中使用Hibernate。我的WebAppConfig文件如下所示: 而我的属性配置文件(application.properties)如下: 我已经在/ etc / mysql / certs内部生成了正确的证书,并编辑了my.cnf以指

  • 我正在使用LWJGL,当使用Util.checkGLError()检查时,下面的OpenGL调用导致无效的枚举错误 GL11.glTexParameteri(GL11.GL_TEXTURE_2D,GL11.GL_Textture_WRAP_S,GL11.GL_CLAMP); 我已经把范围缩小到GL_CLAMP,因为GL_REPEAT有效。还应该指出的是,GL_CLAMP在我的笔记本电脑上运行良好,

  • 问题内容: 在我们的iOS项目中,我们将用于生成AdHoc和AppStore构建的签名证书和供应配置文件都提交给版本控制存储库。这样,每当新开发人员下载该应用程序的新副本时,他就拥有了为测试人员创建AdHoc构建所需的一切。 我们正在使用Jenkins进行持续集成,我希望有一个脚本可以对提交的文件进行完整性检查。特别是,我想检查提交的配置文件是否确实是使用在存储库中提交的签名证书生成的。 有谁知道

  • 我在AWS loadbalancer后面运行spring cloud gateway(我知道它是构建在spring Webflux上的),我收到了502个断断续续的错误。经过调查,问题似乎与loadbalancer和我的节点之间的连接超时有关。从一些调查中可以看出,底层netty服务器的默认超时时间为10秒。我使用以下命令确定了这一点... 虽然我可以将负载均衡器上的idleTimeout设置为1

  • 我试图创建一个Netty(4.1)POC,它可以将h2c(没有TLS的HTTP2)帧转发到h2c服务器上——即本质上创建一个Netty h2c代理服务。Wireshark显示Netty发送帧,h2c服务器应答(例如响应头和数据),尽管我在Netty内部接收/处理响应HTTP帧时遇到了一些问题。 作为一个起点,我已经调整了多路复用。服务器示例()以便在中,我连接到远程节点,而不是使用伪消息进行响应: