2016-07-25 53 views
2

我已创建一些HTTPS服务器与自我签署的证书与此CN=localhost。但是,当我开始在客户端,它告诉我一些绑定,例外:更改在Java中的主机地址

socket::connect fails with error code = 10049 

我创建了CN=hostname一些新的证书,我发现(而这是计算机名)与以下行:

hostname = InetAddress.getLocalHost()); 

但这种方式对我来说并不实际。我想创建一个带有一些URL的证书,如example.com,并且希望多次使用此证书。因此,我不得不以下的想法:我添加一些URL到/ etc/hosts文件,文件中有这样的:

127.0.0.1  example.com 

然后我使用的URL example.com

有什么方法可以更改InetAddress.getLocalhost?或者有可能使用某些客户的IP地址顺序主机名?

我用:

InetSocketAddress address = new InetSocketAddress("test.com",9999); 

创建客户的地址,但是这不能解决绑定的异常。

有人有什么想法吗?

+0

另请参阅[分配一个域名为localhost的开发环境(https://stackoverflow.com/q/7576217/608639)和[本地主机或127.0.0.1的第三方签名SSL证书](https://stackoverflow.com/q/6793174/608639) – jww

+0

***'CN = www.example.com '***可能是错的。主机名始终在* SAN *中。如果它存在于* CN *中,那么它也必须存在于* SAN *中(在这种情况下,您必须列出它两次)。有关更多规则和原因,请参阅[如何使用您的证书颁发机构签署证书签名请求](http://stackoverflow.com/a/21340898/608639)和[如何使用openssl创建自签名证书?]( http://stackoverflow.com/q/10175812/608639)您还需要将自签名证书放入适当的信任库中。 – jww

回答

0

当主机名与主机名映射不可行时,让我们使用IP地址创建证书,然后再将主机名数映射到相同的IP地址。

创建CN=127.0.0.1CN=<LOCAL_IP_ADDRESS>,然后将证书它解析为example.com通过hosts文件,然后尝试使用InetSocketAddress address = new InetSocketAddress("example.com",9999);

+0

你好! Thx为您的回应!我创建了一个新的自签名证书并将其导入到我现有的密钥库中。现在我得到了这个异常:抛出的异常:javax.microedition.pki.CertificateException:证书不包含正确的站点名localhost vs test.com'我不明白这个异常。因为我输入了两个! localhost和test.com的证书。 :-( –

+0

您在证书中有多少条目?您可以尝试使用CN = 127.0.0.1的新证书文件吗? –

+0

您对“您证书中有多少条目?”是什么意思?我创建了一个新的证书与openssl,并将其导入到我的密钥库中,但是这并没有解决我的问题,以我的浏览器作为客户端,我能够访问我的服务器,但与我的客户端,这是一个Java应用程序,我知道这个错误:'发生IOException socket :: connect失败,错误代码= 10051'当我试图达到主机名,我得到像上面写的。我试图解决'https://主机名:443 /' –