2013-02-26 87 views
4

对于这个特定的问题,搜索互联网已经证明过于复杂。也许你可以指出我正确的方向?Java SSL/TLS客户端使用在运行时加载的自签名证书连接并验证服务器?

我已经使用自签名证书设置了SSL/TLS服务器(不是HTTPS)。我已成功连接到它并使用Node.JS

var sock = tls.connect({ 
    host:'127.0.0.1', 
    port:443, 
    servername:'foobar', 
    ca: fs.readFileSync('foobar-cert.pem') 
}, function() { 
    if(sock.authorized) 
    console.log('secure connection - yea!') 
    else 
    console.log('Not Secure because ' + sock.authorizationError) 
}) 

但我似乎无法在Java中找到等效的示例代码。

如何使用自签名证书文件进行服务器身份验证,以Java方式连接到TLS服务器?自签名证书将在运行时加载,而不是安装到计算机的共享CA文件中。

best answer I have found so far需要外部库。这是我的最后手段,因为我相信Java会内置我所需的内容,而且根本不需要外部库。

编辑:感谢您对重新开放问题的快速反应。

编辑:我看到我的问题被关闭为telling java to accept self-signed ssl certificate重复。 这不是正确的,因为我的问题有额外的要求,这是我 上述:

  • 建议:“证书......在你的JVM信任导入”
    我的要求“自我签名证书......没有安装到 计算机的共享文件CA”

  • 建议:‘禁用证书验证’(不推荐)
    我的要求 “自签名的证书将在运行时加载”(和用于服务器验证)

  • 建议:“将其导入您的信任使用keytool”
    我的要求“自签名的证书......没有安装到 计算机的共享文件CA”

回答

4

我写了一个blog post稍后回来显示如何在Android上执行此操作(包括在运行时读取证书),但是相同的代码应该在桌面上运行。

其基本思想是在运行时创建信任库,读取证书并将其添加到信任库。然后使用自定义信任库创建可与SSLSocketFactory一起使用的SSLContext。

博客文章中的示例将SSLSocketFactory传递给URLConnection,但您可以使用SSLSocketFactory的createSocket方法获取套接字并直接使用它。

+0

谢谢。你有我需要的一切。 – 2013-02-27 16:05:54

相关问题