postgres r2dbc 给出 ssl 错误但使用 jpa 连接
postgres r2dbc gives ssl error but connects using jpa
r2dbc 配置:
spring:
profiles: default r2dbc:
url: r2dbc:postgresql://testserver.dev.net:1234/test?ssl=true&sslmode=require
username: test
password: test
connection_timeout: 20000
jpa 配置:
spring:
profiles: default
datasource:
url: jdbc:postgresql://testserver.dev.net:1234/test?ssl=true&sslmode=require
username: test
password: test
hikari:
connectionTimeout: 20000
maximumPoolSize: 5
jpa 连接工作正常 returns 结果,r2dbc 无法连接到服务器,发现无法找到有效证书
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
关闭 r2dbc 和 ssl,它说 pg_hba.conf 没有主机条目。为什么它只要求使用 r2dbc 配置的证书。
与 r2dbc 的依赖关系:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-r2dbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency> <dependency>
<groupId>io.r2dbc</groupId>
<artifactId>r2dbc-postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
with jpa 我正在使用 spring web starter 和 jpa starter,两者都是 spring 版本 2.4.1。
我坚持这个,找不到这个错误的原因。欢迎任何解决方案。
您需要将 r2dbc url 中的“sslmode”参数更改为“sslMode”。如果您不将 sslMode 作为参数传递,R2dbc 似乎将 sslmode 默认为“verify-full”,这就是为什么您会看到无法找到证书的异常。
如果您拥有所有证书,这里是您可以使用的配置,它对我有用。确保证书位于 resources 文件夹中,并且它们应该只采用 pem 格式。
spring:
config:
activate:
on-profile: dev
r2dbc:
url: r2dbc:pool:postgresql://<DB_HOST>:<DB_PORT>/<DB_NAME>
username: <DB_USER>
password: <DB_PASSWORD>
properties:
ssl: true
sslMode: VERIFY_CA
sslRootCert: root.pem
sslCert: server.pem
sslKey: key.pem
r2dbc 配置:
spring: profiles: default r2dbc: url: r2dbc:postgresql://testserver.dev.net:1234/test?ssl=true&sslmode=require username: test password: test connection_timeout: 20000
jpa 配置:
spring: profiles: default datasource: url: jdbc:postgresql://testserver.dev.net:1234/test?ssl=true&sslmode=require username: test password: test hikari: connectionTimeout: 20000 maximumPoolSize: 5
jpa 连接工作正常 returns 结果,r2dbc 无法连接到服务器,发现无法找到有效证书
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
关闭 r2dbc 和 ssl,它说 pg_hba.conf 没有主机条目。为什么它只要求使用 r2dbc 配置的证书。
与 r2dbc 的依赖关系:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-r2dbc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency> <dependency> <groupId>io.r2dbc</groupId> <artifactId>r2dbc-postgresql</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <scope>runtime</scope> </dependency> <dependency>
with jpa 我正在使用 spring web starter 和 jpa starter,两者都是 spring 版本 2.4.1。 我坚持这个,找不到这个错误的原因。欢迎任何解决方案。
您需要将 r2dbc url 中的“sslmode”参数更改为“sslMode”。如果您不将 sslMode 作为参数传递,R2dbc 似乎将 sslmode 默认为“verify-full”,这就是为什么您会看到无法找到证书的异常。
如果您拥有所有证书,这里是您可以使用的配置,它对我有用。确保证书位于 resources 文件夹中,并且它们应该只采用 pem 格式。
spring:
config:
activate:
on-profile: dev
r2dbc:
url: r2dbc:pool:postgresql://<DB_HOST>:<DB_PORT>/<DB_NAME>
username: <DB_USER>
password: <DB_PASSWORD>
properties:
ssl: true
sslMode: VERIFY_CA
sslRootCert: root.pem
sslCert: server.pem
sslKey: key.pem