【问题标题】:Android Wifi EAP TLS using WifiEnterpriseConfig setClientKeyEntry使用 WifiEnterpriseConfig setClientKeyEntry 的 Android Wifi EAP TLS
【发布时间】:2014-02-18 17:25:29
【问题描述】:

WifiEnterpriseConfig setClientKeyEntry 方法采用私钥和证书引用。 我有一个 .p12 证书存储在 Android 证书存储中。 我可以使用 KeyChain API(getCertificateChain、getPrivateKey)来获取私钥和​​证书引用并将其传递给 setClientKeyEntry 吗? 或者,如果我有一个字符串或字节数组格式的 .p12 证书,那么我是否需要将其存储在证书存储中才能将其用于 Wifi EAP-TLS?

假设: 在 Android 4.3+ 客户端上以编程方式设置 EAP-TLS 需要 setClientKeyEntry 方法。

【问题讨论】:

  • 从我的测试中,我观察到当我使用 KeyChain getPrivateKey 方法获取 PrivateKey 引用,然后在 setClientKeyEntry 中使用它时,它会抛出异常 - java.lang.IllegalArgumentException:无法编码私钥。如果 getEncoded 方法为 PrivateKey 对象引用返回 null,则 setClientKeyEntry 方法将引发此异常。不清楚为什么 getEncoded 返回 null。

标签: android android-wifi wifi


【解决方案1】:

试试这个:

WifiConfiguration wc = new WifiConfiguration();
wc.SSID = "\"your_ssid\"";
wc.allowedKeyManagement.set(KeyMgmt.WPA_EAP);
wc.allowedKeyManagement.set(KeyMgmt.IEEE8021X);
wc.enterpriseConfig.setEapMethod(Eap.TLS);
wc.status = WifiConfiguration.Status.ENABLED;

...

KeyStore pkcs12ks = KeyStore.getInstance("pkcs12");

in = new BufferedInputStream(new FileInputStream(new File("/path/to/your.p12")));
// alternatively you can read from any input stream, e.g. ByteArrayInputStream to read from String

pkcs12ks.load(in, "pasword".toCharArray());

Enumeration<String> aliases = pkcs12ks.aliases();
while (aliases.hasMoreElements()) {
    String alias = aliases.nextElement();
    Log.d(TAG, "Processing alias " + alias);

    X509Certificate cert = (X509Certificate) pkcs12ks.getCertificate(alias);
    Log.d(TAG, cert.toString());

    PrivateKey key = (PrivateKey) pkcs12ks.getKey(alias, "password".toCharArray());
    Log.d(TAG, key.toString());

    wc.enterpriseConfig.setClientKeyEntry(key, cert);
    wc.enterpriseConfig.setIdentity("WiFi-1");
}

...

int netID = wifiManager.addNetwork(wc);
wifiManager.saveConfiguration();
wifiManager.enableNetwork(netID, true);

未显示正确的异常处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    • 2013-09-28
    • 1970-01-01
    • 2012-03-02
    • 1970-01-01
    • 2011-05-14
    • 2023-04-02
    相关资源
    最近更新 更多