使用本地 HTTPS SSL证书的安全WebSocket(WSS)?

3

我对WebSocket和SSL证书并不是很了解。

我在Android端创建了自己的WebSocket服务器,网站是客户端。我能够使用普通的WebSocket (ws://)使其正常工作,但由于需要SSL证书,所以无法使用安全WebSocket (wss://)

我的问题是如何获取SSL证书?据我所知,SSL证书是基于域名的。我需要它用于本地主机。我需要它用于类似这样的地址:

wss://localhost:8080/ws/main

如何获得适用于localhost的SSL证书?

谢谢您的时间!

====================== 编辑 =====================

我这么做的原因是:我的Android应用程序中有一个蓝牙服务,它将从连接的健康蓝牙设备(例如体重秤和血压机)获取数据。我已经实现了这部分功能,并希望将这些数据传递到网站上。WebSocket似乎更容易一些,因为用户会打开我的应用程序,当他们称重时,网站上的字段会自动填写来自体重秤的体重。我希望我表述清楚了。

要做到这一点,我需要有一种方法将Java(Android)中的体重或血压值传递到在WebView中加载的网站。所以我认为WebSocket是最容易的方式。

请告诉我是否认为有更简单的方法。

另外,我已经尝试过使用自签名证书,但我收到以下错误:

I/X509Util: Failed to validate the certificate chain, error: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.

或者

Exception=javax.net.ssl.SSLException: Error occured in delegated task:javax.net.ssl.SSLException: Not trusted server certificate

谢谢!!!


在安全方面,Android 设备上开放端口是一个有风险的建议。除此之外,请解释一下“网站”如何使用 localhost Web socket。这个 Web 服务器是否也托管在 Android 设备上?如果它是在其他地方托管的 Web 服务器,我不明白它如何使用仅通过 localhost 可用的 Web socket。关于 SSL 和 localhost,据我所知是不可能的。 - CommonsWare
Websocket服务器在安卓应用程序内部,我正在使用webview在同一应用程序中加载websocket客户端(网站)。这就是为什么它是localhost。这个实现可以正常工作,并且可以发送数据。我知道逻辑不是问题所在。感谢您的回复。 - ᴛʜᴇᴘᴀᴛᴇʟ
1
我不清楚你为什么首先要使用WebSockets,因为在设备上有更有效和安全的选项可以让Web应用程序与Java代码进行通信。考虑到数据包没有离开设备,使用SSL似乎是毫无意义的。无论如何,除了可能使用自签名的SSL证书之外,我不知道任何一种方法可以对“localhost”进行SSL加密。 - CommonsWare
@CommonsWare请看一下我在帖子上的编辑。我已经解释了为什么我这样做。再次感谢! - ᴛʜᴇᴘᴀᴛᴇʟ
请告诉我,如果您认为有更简单的方法 -- 在 WebView 上使用 addJavascriptInterface() - CommonsWare
显示剩余4条评论
1个回答

0

我们曾经遇到过类似的问题,我们的解决方案是在我们的一个域名下注册一个子域名,并将A记录指向127.0.0.1,并为该域名获取证书。

  • local.example.com -> A记录指向127.0.0.1
  • 请求local.example.com的SSL证书

很抱歉这个答案对你来说可能太晚了,但它对其他找到这篇文章的人可能有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接