gpt4 book ai didi

java - 创建从 Java 客户端(在 Android 上)到 Python 服务器的自签名 SSL 套接字

转载 作者:太空宇宙 更新时间:2023-11-03 14:44:11 25 4
gpt4 key购买 nike

我创建了一个自签名证书(server.crt、server.key、server.p12)。我使用这个工作正常的自签名证书获得了 Python-Python SSL 套接字连接。

Python 服务器:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 10023))
s.listen(5)
s_, fromaddr = s.accept()
connstream = ssl.wrap_socket(s_,
server_side=True,
certfile="server.crt",
keyfile="server.key")
data = connstream.read()
...

现在,我希望我的 Android 应用程序能够与我的 Python 服务器通信。我可以获得非 SSL 连接。我不确定如何处理自签名证书。我的理解是我必须将证书存储在 Java 的信任库中。我很难找到使用受信任的证书文件(例如 crt?)在 Android 应用程序中(以编程方式)执行此操作的示例。显然,这种信任的范围仅限于应用程序,并不是永久性的解决方案。

Java 客户端(Android 上):

SSLSocketFactory ssf = (SSLSocketFactory) SSLSocketFactory.getDefault();
Socket socket = ssf.createSocket(HOST, PORT);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.println("hello from java!");
out.flush();
...

当我尝试连接时,我在服务器上收到以下错误:

ssl.SSLError: [Errno 1] _ssl.c:499: error:14094416:SSL routines:SSL3_READ_BYTES:sslv3 alert certificate unknown

最佳答案

  • 在服务器导出crt文件
  • 从 Android 代码的断言或文件中导入 crt 文件
  • 在 Android 代码中使用 TrustManagerFactory 设置 crt
  • 使用TrustManagerFactory初始化SSLContext

这是对 official document 的引用

关于java - 创建从 Java 客户端(在 Android 上)到 Python 服务器的自签名 SSL 套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40478340/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com