如何解决错误:“由于主机名验证程序无法验证主机名,因此无法分配连接”

时间:2019-04-06 04:30:28

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

当我尝试向我的AWS EC2实例发出请求时,出现错误“由于hostnameverifier PgjdbcHostnameVerifier无法验证my_dns_of_postgresql_database而无法分配连接”,在这种情况下我该怎么办?

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

当我不发出请求时(只需键入dns地址,端口和war文件名应用程序-如:http://ec2-2-81-22-142.compute-1.amazonaws.com:8080/TamboServer-1.0-SNAPSHOT/)就会显示Servlet响应,即Hello World;当我在PC(本地主机)上尝试该命令时,会收到成功的响应,因此我认为这不是服务器应用程序中的问题。也许在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实例吗? 在此先感谢您,如果我在书写时犯了一些错误(我不是英语为母语的人),请对不起。

1 个答案:

答案 0 :(得分:0)

实际上,我删除了我的JDBC连接池中的参数ssl URL,并添加了sslfactory=org.postgresql.ssl.NonValidatingFactory简要this响应。 documentation这么说,这是一个蛮力的解决方案,因为它允许“中间人”攻击,使其不安全,但这对我在做什么很重要。