Verbinden Android-WiFi-Unternehmensnetzwerk EAP(PEAP)
Habe ich versucht eine Verbindung zu meinem android-Gerät an ein enterprise network programmatisch in den vergangenen Tagen ohne Erfolg, ich habe folgenden mehrere Beispiele online, aber die meisten von denen, die ich finde sind für die EAP-TLS ( - ) Netzwerken und das einzige, wo ich arbeite, ist EAP(PEAP), hier ist die Art von Netzwerk.
802.1 x EAP
EAP-Methode: PEAP
Phase 2-Authentifizierung: MSCHAPV2
die Authentifizierung schlägt immer fehl und logcat nicht zeigen Sie mir, wo das problem ist, ich weiß nur, es schlägt fehl, wenn die Authentifizierung durchgeführt wird.
Hier ist eine Kopie von meinem aktuellen code und der Protokolle von logcat, wo es scheitert:
/****************** CODE ******************************/
public class WPAActivity extends LauncherActivity
{
private static final String TAG = "WPAActivity";
/************* Definitions to find variables ***************************/
private static final String INT_PRIVATE_KEY = "private_key";
private static final String INT_PHASE2 = "phase2";
private static final String INT_PASSWORD = "password";
private static final String INT_IDENTITY = "identity";
private static final String INT_EAP = "eap";
private static final String INT_CLIENT_CERT = "client_cert";
private static final String INT_CA_CERT = "ca_cert";
private static final String INT_ANONYMOUS_IDENTITY = "anonymous_identity";
final String INT_ENTERPRISEFIELD_NAME ="android.net.wifi.WifiConfiguration$EnterpriseField";
/************************************************************************/
/********************************Configuration Strings*********************/
final String ENTERPRISE_EAP = "PEAP";
final String ENTERPRISE_CLIENT_CERT = "";
final String ENTERPRISE_PRIV_KEY = "";
final String ENTERPRISE_PHASE2 = "\"MSCHAPV2\"";
final String ENTERPRISE_ANON_IDENT = "";
final String ENTERPRISE_CA_CERT = "";
final String userName = "\"my Username";
final String passString = "\"my Password\"";
/**************************************************************************/
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiConfiguration wc = new WifiConfiguration();
wc.SSID = "\"mySSID\"";
wc.preSharedKey = "\"my Password\"";
wc.hiddenSSID = true;
wc.status = WifiConfiguration.Status.ENABLED;
wc.allowedKeyManagement.clear();
wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.IEEE8021X);
wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP);
/*Group Ciphers*/
wc.allowedGroupCiphers.clear();
wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
/*Protocols*/
wc.allowedProtocols.clear();
wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
wc.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
Class[] enterpriseFieldArray = WifiConfiguration.class.getClasses();
Class<?> enterpriseFieldClass = null;
for(Class<?> myClass : enterpriseFieldArray)
{
if(myClass.getName().equals(INT_ENTERPRISEFIELD_NAME))
{
enterpriseFieldClass = myClass;
break;
}
}
Log.d(TAG, "class chosen " + enterpriseFieldClass.getName() );
Field anonymousId = null, caCert = null, clientCert = null,
eap = null, identity = null, password = null,
phase2 = null, privateKey = null;
Field[] fields = WifiConfiguration.class.getFields();
for (Field tempField : fields)
{
if (tempField.getName().trim().equals(INT_ANONYMOUS_IDENTITY))
{
anonymousId = tempField;
Log.d(TAG, "field " + anonymousId.getName() );
}
else if (tempField.getName().trim().equals(INT_CA_CERT))
{
caCert = tempField;
}
else if (tempField.getName().trim().equals(INT_CA_CERT))
{
}
else if (tempField.getName().trim().equals(INT_CLIENT_CERT))
{
clientCert = tempField;
Log.d(TAG, "field " + clientCert.getName() );
}
else if (tempField.getName().trim().equals(INT_EAP))
{
eap = tempField;
Log.d(TAG, "field " + eap.getName() );
}
else if (tempField.getName().trim().equals(INT_IDENTITY))
{
identity = tempField;
Log.d(TAG, "field " + identity.getName() );
}
else if (tempField.getName().trim().equals(INT_PASSWORD))
{
password = tempField;
Log.d(TAG, "field " + password.getName() );
}
else if (tempField.getName().trim().equals(INT_PHASE2))
{
phase2 = tempField;
Log.d(TAG, "field " + phase2.getName() );
}
else if (tempField.getName().trim().equals(INT_PRIVATE_KEY))
{
privateKey = tempField;
}
}
Method setValue = null;
for(Method m: enterpriseFieldClass.getMethods())
{
if(m.getName().trim().equals("setValue"))
{
Log.d(TAG, "method " + m.getName() );
setValue = m;
break;
}
}
try
{
//EAP
setValue.invoke(eap.get(wc), ENTERPRISE_EAP);
//EAP Phase 2
setValue.invoke(phase2.get(wc), ENTERPRISE_PHASE2);
//EAP Anonymous Id
setValue.invoke(anonymousId.get(wc), ENTERPRISE_ANON_IDENT);
//EAP CA Certificate
setValue.invoke(caCert.get(wc), ENTERPRISE_CA_CERT);
//Private Key
setValue.invoke(privateKey.get(wc), ENTERPRISE_PRIV_KEY);
//EAP Identity
setValue.invoke(identity.get(wc), userName);
//EAP Password
setValue.invoke(password.get(wc), passString);
//EAP Client certificate
setValue.invoke(clientCert.get(wc), ENTERPRISE_CLIENT_CERT);
}
catch (Exception e)
{
}
Log.d("WifiPreference", "2");
int res = wifi.addNetwork(wc);
Log.d("WifiPreference", "add Network returned " + res );
boolean b = wifi.enableNetwork(res, true);
Log.d("WifiPreference", "enableNetwork returned " + b );
}
}
- und das sind die logs anzeigt, wo die Verbindung fehlschlägt
/************************Und hier sind die logs********************/
02-09 09:23:30.514: I/ActivityManager(2084): Displayed activity com.test.wpa/.WPAActivity: 445 ms (total 445 ms)
02-09 09:23:31.514: I/wpa_supplicant(27633): CTRL-EVENT-SCAN-RESULTS Ready
02-09 09:23:31.514: I/wpa_supplicant(27633): Trying to associate with 00:1c:0f:82:04:e0 (SSID='*****' freq=2437 MHz)
02-09 09:23:31.514: I/wpa_supplicant(27633): CTRL-EVENT-STATE-CHANGE id=-1 state=3
02-09 09:23:31.649: V/WifiMonitor(2084): Event [Trying to associate with 00:1c:0f:82:04:e0 (SSID='*****' freq=2437 MHz)]
02-09 09:23:31.649: V/WifiMonitor(2084): Event [CTRL-EVENT-STATE-CHANGE id=-1 state=3]
02-09 09:23:31.654: V/WifiStateTracker(2084): Changing supplicant state: SCANNING ==> ASSOCIATING
02-09 09:23:31.654: D/NetworkStateTracker(2084): setDetailed state, old =SCANNING and new state=CONNECTING
02-09 09:23:31.659: D/ConnectivityService(2084): ConnectivityChange for WIFI: CONNECTING/CONNECTING
02-09 09:23:32.621: I/wpa_supplicant(27633): CTRL-EVENT-STATE-CHANGE id=0 state=4
02-09 09:23:32.621: V/WifiMonitor(2084): Event [CTRL-EVENT-STATE-CHANGE id=0 state=4]
02-09 09:23:32.624: I/wpa_supplicant(27633): Associated with 00:1c:0f:82:04:e0
02-09 09:23:32.624: I/wpa_supplicant(27633): CTRL-EVENT-EAP-STARTED EAP authentication started
02-09 09:23:32.629: V/WifiMonitor(2084): Event [Associated with 00:1c:0f:82:04:e0]
**02-09 09:23:32.629: V/WifiMonitor(2084): Event [CTRL-EVENT-EAP-STARTED EAP authentication started]**
02-09 09:23:32.629: V/WifiStateTracker(2084): Changing supplicant state: ASSOCIATING ==> ASSOCIATED
**02-09 09:23:32.629: D/NetworkStateTracker(2084): setDetailed state, old =CONNECTING and new state=CONNECTING**
**02-09 09:23:32.634: I/wpa_supplicant(27633): CTRL-EVENT-DISCONNECTED - Disconnect event - remove keys**
02-09 09:23:32.644: I/wpa_supplicant(27633): CTRL-EVENT-STATE-CHANGE id=0 state=0
**02-09 09:23:32.644: V/WifiMonitor(2084): Event [CTRL-EVENT-DISCONNECTED - Disconnect event - remove keys]**
02-09 09:23:32.644: V/WifiMonitor(2084): Event [CTRL-EVENT-STATE-CHANGE id=0 state=0]
Konnte ich nicht finden, Beispiele, die online über die EAP (PEAP) - Authentifizierung programmgesteuert, ich habe versucht, die änderung der WLAN-Konfiguration, ohne Erfolg. Irgendwelche Ideen oder hilfreiche Seiten/Beispiele, wie man eine Verbindung zu einem Unternehmensnetzwerk EAP (PEAP), oder kann mir jemand zeigen in die richtige Richtung?
- Ich konnte nicht herausfinden, also beschloss ich einfach zu sagen, der Benutzer eine Verbindung manuell ein, wenn keine Verbindung gefunden wird oder wenn eine exception geworfen wird, scheint es besser zu funktionieren.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schließlich habe ich gegen meinen CiSCO EAP-FAST w-LAN Netzwerk, und alle unsere Android-Geräte werden nun in der Lage, sich zu verbinden.
Den walk-around habe ich durchgeführt, um den Zugang zu dieser Art von Netzwerken, die von einem Android-Gerät sind am einfachsten als Sie sich vorstellen können.
Gibt es ein Wifi Config Editor in den Google Play Store, die Sie verwenden können, um Sie zu "aktivieren", die sekundäre CISCO-Protokollen, wenn Sie die Einrichtung eines EAP-wifi-Verbindung.
Sein name ist, Wifi Advanced Config Editor.
Zuerst müssen Sie zum einrichten der wireless-Netzwerk manuell so nah wie können Sie zu Ihrem "offiziellen" corporate wifi-Parametern.
Speichern.
Gehen, um den WCE und Bearbeiten der Parameter von dem Netzwerk, das Sie im vorherigen Schritt erstellt haben.
Gibt es 3 oder 4 Reihe von Einstellungen, die Sie aktivieren sollten, um die Kraft des Android-Gerät, Sie zu verwenden, als ein Weg, um eine Verbindung (die Haupt-Website, die ich denke, Sie wollen zu besuchen, ist die Enterprise-Konfiguration, aber vergessen Sie nicht, überprüfen Sie alle Parameter ändern Sie, wenn nötig.
Als Anregung, auch wenn Sie eine WPA2-EAP-FAST-Verschlüsselung versuchen QUANTENSPRUNG in Ihrem setup. Es war für mich wie ein Charme.
Wenn Sie fertig Bearbeiten der config, gehen Sie auf die Haupt-Android-wifi-controller und die Kraft, um die Verbindung zu diesem Netzwerk.
Nicht Bearbeiten, das Netzwerk erneut mit dem Android-wifi-Schnittstelle.
Habe ich es getestet auf Samsung Galaxy 1 und 2, Hinweis: mobile Geräte, und auf einem Lenovo Thinkpad Tablet.
Danke für die Aufklärung uns Cypawer.
Ich habe auch versucht diese app https://play.google.com/store/apps/details?id=com.oneguyinabasement.leapwifi
und es funktionierte einwandfrei.