如何解决连接被拒绝问题
现象描述
调用Open API时出现如下错误,请问如何解决?
Exception in thread "main" org.apache.http.conn.HttpHostConnectException: Connection to https://10.66.66.58:32102 refused at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:190) at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:294) at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:640) at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:479) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:784) at com.huawei.oms.ros.test.NewHttpsAccess.access(NewHttpsAccess.java:155) at com.huawei.oms.ros.test.Login.login(Login.java:34) at com.huawei.oms.ros.test.QueryLogs.main(QueryLogs.java:17) Caused by: java.net.ConnectException: Connection refused: connect at java.net.DualStackPlainSocketImpl.connect0(Native Method) at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:69) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391) at java.net.Socket.connect(Socket.java:579) at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:612) at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:549) at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180) ... 9 more
可能原因
- 服务器的Open API端口(缺省为32102)没有处于侦听状态。
企业解决方案指定Open API访问端口为32102,请不要使用8086、31943、32101这些端口来访问Open API。
- 配置文件ros.xml的“ip”项或“ssl.keystore.password”项配置错误。
处理步骤
- 检查Open API端口32102是否处于侦听状态。Windows和Linux操作系统中命令分别如下。
- Windows:netstat -an|findstr 32102
- Linux:netstat -an|grep 32102
以Windows下为例介绍如何判断端口是否处于侦听状态:
C:\>netstat -an|findstr 32102 TCP 0.0.0.0:32102 0.0.0.0:0 LISTENING TCP [::]:32102 [::]:0 LISTENING
- 检查证书密码和ros.xml以及ros_config_esight.xml配置文件中的密码是否一致。Windows和Linux操作系统中命令相同,下面以Windows操作系统为例进行说明。
如果端口不处于侦听状态,常见原因是证书(eSight安装目录/AppBase/etc/certificate/application/node/nodeKeyStore.jks)密码和配置文件(eSight安装目录/AppBase/etc/oms.ros/ros.xml)或(eSight安装目录/AppBase/etc/oms.ros/ros_config_esight.xml)中的密码不一致。
- 确认证书密码正确。
在JRE的bin目录(eSight安装目录/AppBase/jre/bin)下执行命令:
keytool -v -list -keystore eSight安装目录/AppBase/etc/certificate/application/node/nodeKeyStore.jks -storepass 证书密码
例如,以下执行情况表示证书的密码不是Example@123。
keytool -v -list -keystore eSight安装目录/AppBase/etc/certificate/application/node/nodeKeyStore.jks -storepass Example@123 keytool错误: java.io.IOException: Keystore was tampered with, or password was incorrect java.io.IOException: Keystore was tampered with, or password was incorrect at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:771) at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:38) at java.security.KeyStore.load(KeyStore.java:1185) at sun.security.tools.KeyTool.doCommands(KeyTool.java:620) at sun.security.tools.KeyTool.run(KeyTool.java:172) at sun.security.tools.KeyTool.main(KeyTool.java:166) Caused by: java.security.UnrecoverableKeyException: Password verification failed at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:769) ... 5 more
以下执行情况表示证书的密码是Example@123。
keytool -v -list -keystore eSight安装目录/AppBase/etc/certificate/application/node/nodeKeyStore.jks -storepass Example@123 Keystore 类型: JKS Keystore 提供者: SUN 您的 keystore 包含 1 输入 别名名称: server 创建日期: 2012-12-29 项类型: PrivateKeyEntry 认证链长度: 1 认证 [1]: 所有者:CN=omsMaster, OU=Developer, O=Techstar, L=ShenZhen, ST=ShenZhen, C=CH 签发人:CN=omsMaster, OU=Developer, O=Techstar, L=ShenZhen, ST=ShenZhen, C=CH 序列号:50de6922 有效期: Sat Dec 29 11:53:06 GMT+08:00 2012 至Tue Dec 27 11:53:06 GMT+08:00 2022 证书指纹: MD5:90:DB:D2:38:86:42:D9:56:9A:7F:0F:B5:EE:7B:C3:09 SHA1:60:5E:E6:33:DD:6F:17:8D:A6:44:4A:E8:80:24:64:3F:DC:13:F3:53 签名算法名称:SHA1withRSA 版本: 3 ******************************************* *******************************************
执行命令如果报command not find错误,可尝试在命令前面加./执行,如:
./keytool -v -list -keystore eSight安装目录/AppBase/etc/certificate/application/node/nodeKeyStore.jks -storepass Example@123
- 获取证书密码对应的密文。
在 eSight安装目录/AppBase/tools/bmetool/encrypt路径下执行encrypt.bat 0,然后根据提示输入新密码。
执行成功后,输出结果为加密后密文。
- 将证书密码的密文配置到配置文件中。
配置eSight安装目录/AppBase/etc/oms.ros/ros.xml文件。
<connector name="openapiROAConnector" type="https"> <property name="ip" value="{网管服务器实际的IP地址}"/> <property name="port" value="32102"/> <property name="ssl.keystore.path" value=" etc/certificate/application/node/nodeKeyStore.jks"/> <property name="ssl.keystore.password" value="@010200000000b9818dd5cd70b846e8f177fddb1324ee4b40471f48d223338a2f2ef1c105f889"/> </connector>
"@010200000000b9818dd5cd70b846e8f177fddb1324ee4b40471f48d223338a2f2ef1c105f889"为加密后密文。
- 配置eSight安装目录/AppBase/etc/oms.ros/ros_config_esight.xml文件。
<connector name="openapiROAConnector" type="https"> <property name="ip" value="{网管服务器实际的IP地址}"/> <property name="port" value="32102"/> <property name="ssl.keystore.path" value=" etc/certificate/application/node/nodeKeyStore.jks"/> <property name="ssl.keystore.password" value="@010200000000b9818dd5cd70b846e8f177fddb1324ee4b40471f48d223338a2f2ef1c105f889"/> </connector>
"@010200000000b9818dd5cd70b846e8f177fddb1324ee4b40471f48d223338a2f2ef1c105f889"为加密后密文。
- 确认证书密码正确。
- 将配置文件(eSight安装目录/AppBase/etc/oms.ros/ros.xml)以及(eSight安装目录/AppBase/etc/oms.ros/ros_config_esight.xml)中“ip”修改为网管服务器实际的IP地址。
“ip”不能设置为127.0.0.1。
- 重启网管。