gpt4 book ai didi

android - 如何使 Android 上的 NanoHTTPD 接受来自具有专用客户端证书的客户端的连接

转载 作者:太空宇宙 更新时间:2023-11-03 13:34:07 26 4
gpt4 key购买 nike

我使用 NanoHTTPD 在 Android 设备上创建了一个网络服务。但它将信任所有证书并接受来自所有客户端的 SSL 连接。我只想限制来自特定客户端的访问。

更新:我尝试这样工作:

        String KEYSTOREPASS = "test";
char[]ctpass = KEYSTOREPASS.toCharArray();
KeyStore ks = KeyStore.getInstance("PKCS12");

//Directly load cert from Resources
//ks.load(ctx.getResources().openRawResource(R.raw.cayan_cert),kspass);

//Or dynamically generate a cert and use it
ipAddressInCN = MainApplication.getIPAddress();

//Use the current IP Address to generate a cert that signed by hard coded CA, and add to keystore
String CN = "CN=" + ipAddressInCN;
ks.load(null, null);
GenerateCSR.AddCertToKeyStore(ks, ctpass, CN);

KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(ks, ctpass);

SSLContext sc = SSLContext.getInstance("TLS");

TrustManager[] tm = new TrustManager[]{new X509TrustManager() {

public java.security.cert.X509Certificate[] getAcceptedIssuers() {

return new java.security.cert.X509Certificate[0];
}

public void checkClientTrusted(java.security.cert.X509Certificate[] certs,
String authType) {
System.out.println("abc");
return;
}

public void checkServerTrusted(java.security.cert.X509Certificate[] certs,
String authType) {

return;
}

}};

sc.init(kmf.getKeyManagers(), tm, null);
server.makeSecure(sc.getServerSocketFactory(), null);

我尝试为我的自定义信任管理器函数设置断点,但它们从未被调用。

最佳答案

But it will trust all certificate and accept SSL connection from all client.

不是真的。它只会接受来自具有受信任证书的客户端的 SSL 连接,除非您安装了一些脑残的信任所有证书垃圾,在这种情况下您应该删除它们。

I want to limit the access from specific client only.

你应该通过授权来做到这一点,你必须在 NanoHTTPD 中自己实现。

关于android - 如何使 Android 上的 NanoHTTPD 接受来自具有专用客户端证书的客户端的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45685117/

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