java - 如何解决错误: "Connection could not be allocated because the hostname could not be verified by hostnameverifier"

标签 java postgresql amazon-ec2 heroku-postgres glassfish-4.1

当我尝试向 AWS EC2 实例发出某些请求时,收到错误“无法分配连接,因为主机名验证程序 PgjdbcHostnameVerifier 无法验证 my_dns_of_postgresql_database”,在这种情况下我该怎么办?

我在 AWS 的 EC2 实例(标准的 t2.micro)中部署了 Glassfish 4.1(一个 war 文件)中的服务器。该项目在 postgreSQL 中调用 Heroku 的数据库服务器(数据库不在 AWS 实例中)。我尝试更改安全组规则以接受 postgreSQL 入站和出站流量,但这不起作用。

当我不发出请求时(只需输入 dns 地址、端口和 war 文件名应用程序 - 例如: http://ec2-2-81-22-142.compute-1.amazonaws.com:8080/TamboServer-1.0-SNAPSHOT/ )会显示 Servlet 响应,一个 Hello World;当我在我的电脑(本地主机)中尝试它时,我得到了成功的响应,所以我不认为这是服务器应用程序中的问题。也许是 Heroku 数据库或 EC2 实例中的一些配置。

以下是 Glassfish 中 server.logs 文件的一些行:

[2019-04-06T04:03:45.933+0000] [glassfish 4.1] [INFO] [] [] [tid: _ThreadID=30 _ThreadName=Thread-8] [timeMillis: 1554523425933] [levelValue: 800] [[
  [EL Info]: 2019-04-06 04:03:45.932--ServerSession(1545400102)--EclipseLink, version: Eclipse Persistence Services - 2.6.1.v20150605-31e8258]]

[2019-04-06T04:03:45.963+0000] [glassfish 4.1] [SEVERE] [] [org.postgresql.ssl.PGjdbcHostnameVerifier] [tid: _ThreadID=30 _ThreadName=http-listener-1(4)] [timeMillis: 1554523425963] [levelValue: 1000] [[
  Server name validation failed: hostname ec2-107-22-163-8.compute-1.amazonaws.com does not match common name ip-10-0-63-18.ec2.internal]]

[2019-04-06T04:03:45.963+0000] [glassfish 4.1] [WARNING] [poolmgr.create_resource_error] [javax.enterprise.resource.resourceadapter.com.sun.enterprise.resource.allocator] [tid: _ThreadID=30 _ThreadName=http-listener-1(4)] [timeMillis: 1554523425963] [levelValue: 900] [[
  RAR5038:Unexpected exception while creating resource for pool { PoolInfo : (name=java:app/post-gre-sql_...), (applicationName=TamboServer-1.0-SNAPSHOT) }. Exception : javax.resource.spi.ResourceAllocationException: Connection could not be allocated because: The hostname ec2-107-22-163-8.compute-1.amazonaws.com could not be verified by hostnameverifier PgjdbcHostnameVerifier.]]

我希望能够将在 EC2 实例中运行的服务器连接到 Heroku 的数据库(实际上,它也分配在 AWS 机器中)。如果不是,我应该将数据库迁移到 EC2 实例吗? 预先感谢,如果我犯了一些写作错误,请抱歉(我不是以英语为母语的人)

最佳答案

Currentyl 我删除了 JDBC 连接池中的参数 ssl URL,并添加了 sslfactory=org.postgresql.ssl.NonValidatingFactory 如何使用 this回复。这是一个蛮力解决方案,因为允许“中间人”攻击,使其不安全,documentation 是这样说的。 ,但这对于我正在做的事情来说是可以的。

关于java - 如何解决错误: "Connection could not be allocated because the hostname could not be verified by hostnameverifier",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55545924/

相关文章:

java - Hibernate 尝试在 saveOrUpdate 方法中删除不存在表中的行

sql - 如何改进这个条件 UPDATE 查询?

amazon-ec2 - 从 CloudFront 到服务器的字体 CORS 问题

cron - 如何外包周期性任务(即在 'cloud' 中)?

java - 带有 swing mysql 和配置文件的小程序在 eclipse 中工作但在浏览器中失败

java - 如何用hibernate将汉字写入MySQL?

java - 我的 Play 服务是否应该始终是带有 promise 的异步调用?

c - 带有 Visual Studio 2015 的 PostgreSQL 9.6.1 扩展

postgresql - psycopg2 在 SELECT 语句中舍入我的 float

amazon-web-services - 如果弹性 ip 关联到另一个正在运行的 ec2 实例,是否可以在重启后将弹性 ip 与 ec2 实例重新关联?