Neo4j-由于身份验证失败,客户端未经授权

时间:2020-07-21 18:25:17

标签: authentication google-cloud-platform neo4j graphql bolt

我目前正在Google Cloud VM实例上运行Neo4j 3.4.9版,但遇到无法解决的身份验证问题。

我的Neo4j服务器在云中运行良好,我可以使用Neo4j浏览器直接访问它。我已经更改了默认的neo4j用户密码。我还可以从GraphQL游乐场成功查询Neo4j服务器。

我已经检查了neo4j-driverneo4jgraphql-js模块,它们都是最新版本。我还检查了.env文件,该文件的用户名和密码与默认的neo4j用户以及我从默认的默认密码更改为正确的密码。

我尝试通过将dbms.security.auth_enabled文件中的false设置更改为neo4j.conf来运行没有身份验证的Neo4j服务器,但这没有帮助。

我还检查了Neo4j服务器日志,这是服务器端的错误:

2020-07-21 17:59:48.830+0000 ERROR [o.n.b.t.TransportSelectionHandler] Fatal error occurred during protocol selection for connection: [id: 0x2434a10e, L:/10.154.0.2:7687 ! R:/86.151.231.207:63494] javax.net.ssl.SSLException: Received fatal alert: certificate_unknown
io.netty.handler.codec.DecoderException: javax.net.ssl.SSLException: Received fatal alert: certificate_unknown
    at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:459)
    at io.netty.handler.codec.ByteToMessageDecoder.channelInputClosed(ByteToMessageDecoder.java:392)
    at io.netty.handler.codec.ByteToMessageDecoder.channelInputClosed(ByteToMessageDecoder.java:359)
    at io.netty.handler.codec.ByteToMessageDecoder.channelInactive(ByteToMessageDecoder.java:342)
    at io.netty.handler.ssl.SslHandler.channelInactive(SslHandler.java:1028)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:245)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:231)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:224)
    at io.netty.channel.ChannelInboundHandlerAdapter.channelInactive(ChannelInboundHandlerAdapter.java:75)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:245)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:231)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:224)
    at io.netty.channel.DefaultChannelPipeline$HeadContext.channelInactive(DefaultChannelPipeline.java:1429)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:245)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:231)
    at io.netty.channel.DefaultChannelPipeline.fireChannelInactive(DefaultChannelPipeline.java:947)
    at io.netty.channel.AbstractChannel$AbstractUnsafe$8.run(AbstractChannel.java:822)
    at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404)
    at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:309)
    at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)
    at java.lang.Thread.run(Thread.java:748)
Caused by: javax.net.ssl.SSLException: Received fatal alert: certificate_unknown
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:214)
    at sun.security.ssl.SSLEngineImpl.fatal(SSLEngineImpl.java:1667)
    at sun.security.ssl.SSLEngineImpl.fatal(SSLEngineImpl.java:1635)
    at sun.security.ssl.SSLEngineImpl.recvAlert(SSLEngineImpl.java:1801)
    at sun.security.ssl.SSLEngineImpl.readRecord(SSLEngineImpl.java:1090)
    at sun.security.ssl.SSLEngineImpl.readNetRecord(SSLEngineImpl.java:913)
    at sun.security.ssl.SSLEngineImpl.unwrap(SSLEngineImpl.java:783)
    at javax.net.ssl.SSLEngine.unwrap(SSLEngine.java:626)
    at io.netty.handler.ssl.SslHandler$SslEngineType$3.unwrap(SslHandler.java:294)
    at io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1275)
    at io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1177)
    at io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1221)
    at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:489)
    at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:428)

这表明证书错误,因此我将config_dbms.connector.bolt.tls_level文件中的neo4j.conf设置更新为OPTIONAL,但仍然收到此错误。我还尝试将config_dbms.connector.bolt.tls_level设置为DISABLED,但这不能解决问题,还会创建很多其他问题!

我探索过的一种解决方案是在GCP上为Neo4j服务器设置证书,但是根据此Neo4j指南here,您只能使用必须具有有效DNS地址的服务器来执行此操作,没有。我没有在创建时指定主机名,并且使用GCP不能追溯添加一个主机名。

我唯一想到的另一种解决方案是在GCP上使用主机名构建一个新的VM实例,设置正确的DNS记录,获取证书并将我的应用程序指向新的Neo4j服务器。

1 个答案:

答案 0 :(得分:0)

您正在使用neo4j-driverneo4jgraphql-js的最新版本,但是您正在运行旧的neo4j服务器版本(3.4.9)。

您可能需要upgrade将neo4j服务器升级到最新版本。

或者,如果不能这样做,则可以尝试使用与neo4j 3.4.9兼容的最新JS软件包。例如,neo4j-driver version 1.7.7声称是“ for Neo4j 3.0.0 +”。