Hi,
jetzt funktioniert es. In der PEM Datei darf nur das Zertifik enthalten sein. Aller anderer kram muß raus.
SUper super.
Vielen Dank für deinen Unterstützung.
Gruß Ralf
Hi,
jetzt funktioniert es. In der PEM Datei darf nur das Zertifik enthalten sein. Aller anderer kram muß raus.
SUper super.
Vielen Dank für deinen Unterstützung.
Gruß Ralf
Hallo so ich habe es jetzt auch mit den Berechtigungen hinbekommen.
Ich habe folgendes geändert:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String result ="";
if(ContextCompat.checkSelfPermission(this, android.Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
if(ActivityCompat.shouldShowRequestPermissionRationale(this,android.Manifest.permission.READ_EXTERNAL_STORAGE)){
}else{
ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_CODE_ASK_PERMISSION);
}
}
int permissionCheck = ContextCompat.checkSelfPermission(this, android.Manifest.permission.READ_EXTERNAL_STORAGE);
if(ContextCompat.checkSelfPermission(this, android.Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED){
//hier dein Code
copyzerti(this);
ImageDownloader task = new ImageDownloader();
try {
result= task.execute("https://3xxxxxxxxxxxxx.eu").get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
updateOutput(result);
}else {
ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE}, permissionCheck);
}
}
Alles anzeigen
Nun habe ich aber das nächste Problem:
11-02 08:06:30.582 23998-24169/com.example.kruppa.https12 E/MainActivity: failed to create timeApi
java.lang.IllegalArgumentException: bad base-64
at android.util.Base64.decode(Base64.java:161)
at android.util.Base64.decode(Base64.java:136)
at android.util.Base64.decode(Base64.java:118)
at com.chariotsolutions.example.http.SSLContextFactory.loadPemCertificate(SSLContextFactory.java:128)
at com.chariotsolutions.example.http.SSLContextFactory.loadPEMTrustStore(SSLContextFactory.java:62)
at com.chariotsolutions.example.http.SSLContextFactory.makeContext(SSLContextFactory.java:45)
at com.chariotsolutions.example.http.Api.<init>(Api.java:28)
at com.example.kruppa.https12.MainActivity$ImageDownloader.doInBackground(MainActivity.java:109)
at com.example.kruppa.https12.MainActivity$ImageDownloader.doInBackground(MainActivity.java:97)
at android.os.AsyncTask$2.call(AsyncTask.java:295)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
Alles anzeigen
Gruß
Ralf
Hi , super das es bei dir schon geklappt hat.
Ich habe es bei mir jetzt auch getestet habe gerade nur ein Berechtigungs Problem mit der Zertifikats Datei.
Ich habe es in das Root der Internen Spechers kopiert aber er sagt mir immer:
java.io.FileNotFoundException: /storage/emulated/0/client-test.p12 open
falid: EACCESS (Permission denied)
ABer das problem werde ich auch noch lösen.
jetzt schon mal sehr vielen Dank für die tolle Unterstützung.
Gruß Ralf
meine mail ist
[email protected]
schick mir am besten einen mail dann schicke ich dir eine Zertifikat mit Passwort und die Adresse der Webseite.
Danke
Ralf
HI , ich köte dir ein Zertifikat zum testen ausstellen.
Wäre Cool wenn du das machen köntest vieleicht klappt es dann schneller.
Würde es dir dann per Mial schicken.
Gruß Ralf
HI, da kann ich das Certifikas sehen. Die Installation hatte ich schon ganz am Anfang gemacht.
Gruß
Ralf
Das habe ich gemacht.
In dem Beispiel wird eine crt Datei in der APP geladen, ist das denn nicht die Zertifikatsdatei die er für die Kommunikation nutz ?
Ich dachte das man die dort angeben muß ?
// Load CAs from an InputStream
// (could be from a resource or ByteArrayInputStream or ...)
CertificateFactory cf = CertificateFactory.getInstance("X.509");
// From https://www.washington.edu/itconnect/security/ca/load-der.crt
InputStream caInput = new BufferedInputStream(new FileInputStream("load-der.crt"));
Certificate ca;
try {
ca = cf.generateCertificate(caInput);
System.out.println("ca=" + ((X509Certificate) ca).getSubjectDN());
} finally {
caInput.close();
}
Alles anzeigen
In dem Beispiel wird in der Zeit 5 eine crt Datei gelade, das ist doch die die die App nutzen soll, oder ?
Der Andere Fahler ist in Zeile 3. dort wird scheinbar angemeckert das X.509 ?
Ich habe mein Zertifikat in allen versionen zur Verfügung, das ist kein Problem.
Gruß
Ralf
Hallo,
ich habe das mal Probiert sieht soweit eigentlich sehr vielversprechend aus.
Habe aber zwei Probleme :
1. ich habe das Zertifikat unter Lokaler Speicher / SD-Karte download liegen. Eigentlich müste es ja unter APP Data in ein Verzeichnis speziell für die APP. Aber wie gebe ich den Pfad an "/sd-kard/dowload/zertifigat.cer" geht leider nicht.
2. bei der Zeile "CertificateFactory cf = CertificateFactory.getInstance("X.509");" bekomme ich folgenden Fehler "Error:(36, 63) error: unreported exception CertificateException; must be caught or declared to be thrown".
Gruß
Ralf
Hallo, das installieren des Zertifikates auf dem Handy habe ich schon gemacht . Aber danke nochmal fpür die Infos. Vom Chrom auf dem Handy kann ich die Seite auch mit Zertifikat aufrufen, dann bekomme ich noch mal die Abfrage welches ZErtifikat ich benuzen möche. Da ich nur ein Installiert ahbe habe ich auch nur das einen zur auswahl. Und dann klappt es auch.
Der Andere Coe ist das ein APP Java Code ?
Sieht mir mehr wie ein Java vom Windows Server aus .. oder ist das alles gleich ?
Gruß Ralf
Hi ,
sorry aber ich habe eine Problem das mit void setSSLSocketFactory umzusetzen.
Auf der seite ist kein Beispiel und ich bekomme dieses nicht mal ansatzweise umgesetzt.
Kennst du eine Beispiel in dem ich dann meine Zertifikatsdatei ersetzen muß.
Gruß
Ralf
Ich habe auf meinen HOme Server einen eigene PKI mit einen eigenen Server Zertifikat. Dann habe ich entsprechende Client Zertifikate erstellt die mit meinen Root Zertifikat signiert sind. Im Firefox habe ich beispielsweise meine Root Zertifikat eingespielt als Authentiofiezierungstelle und mein Clientzertifikat als Persoen Zertifikt. Damit kann ich per Firefox und https auf die Seite. Das Personen Zertifikat ist dann auch gleichzeitig die Anmeldung auf der Web seite. In der App habe ich nun zwar keine direkte Anmeldung aber der Webserver benötigt das Client Zertifikat zur Authentifizierung.
Gruß
Ralf
HI, auch das habe ioch probiert.
ICh denke el liegt daran das ich auch ein Client Zertifikat benutze und nicht nur ein Server Zertifikat.
Dieses Client Zertifikat muß ich ja angeben, nur weiß ich nicht wie.
Bei deinem Bild ist es zwar eine HTTPS Seite aber hier wirdaber kein Client Zertifikat benötigt.
Gruß
Ralf
Hallo,
auch dieses hatte cih schon getestet.
Dann habe ich folgende Fehlermeldung
E/MainActivity: Error in GetData
javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
Ich denke ich muß ihm noch irgendwie das Zertifikat geben, aber wie ?
Gruß
Ralf
Hallo,
ich versuche gerade eine Kommunikation über https mit Zertifikaten hinzubekommen.
public class MainActivity extends AppCompatActivity {
private static String LOG_TAG = "MainActivity";
TextView TxtResult;
Button PostBtn, GetBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GetBtn = (Button) findViewById(R.id.get_btn);
PostBtn = (Button) findViewById(R.id.post_btn);
GetBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new MakeNetworkCall().execute("https://xxxxxxxx.eu/" +
"mobile.php?get=1", "Get");
}
});
PostBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new MakeNetworkCall().execute("https://xxxxxxx.eu/" +
"tutorial/http.php?post=1", "Post");
}
});
}
InputStream ByGetMethod(String ServerURL) {
InputStream DataInputStream = null;
try {
URL url = new URL(ServerURL);
HttpURLConnection cc = (HttpURLConnection)
url.openConnection();
//set timeout for reading InputStream
cc.setReadTimeout(5000);
// set timeout for connection
cc.setConnectTimeout(5000);
//set HTTP method to GET
cc.setRequestMethod("GET");
//set it to true as we are connecting for input
cc.setDoInput(true);
//reading HTTP response code
int response = cc.getResponseCode();
//if response code is 200 / OK then read Inputstream
if (response == HttpURLConnection.HTTP_OK) {
DataInputStream = cc.getInputStream();
}
} catch (Exception e) {
Log.e(LOG_TAG, "Error in GetData", e);
}
return DataInputStream;
}
InputStream ByPostMethod(String ServerURL) {
InputStream DataInputStream = null;
try {
//Post parameters
String PostParam = "first_name=android&last_name=pala";
//Preparing
URL url = new URL(ServerURL);
HttpURLConnection cc = (HttpURLConnection)
url.openConnection();
//set timeout for reading InputStream
cc.setReadTimeout(5000);
// set timeout for connection
cc.setConnectTimeout(5000);
//set HTTP method to POST
cc.setRequestMethod("POST");
//set it to true as we are connecting for input
cc.setDoInput(true);
//opens the communication link
cc.connect();
//Writing data (bytes) to the data output stream
DataOutputStream dos = new DataOutputStream(cc.getOutputStream());
dos.writeBytes(PostParam);
//flushes data output stream.
dos.flush();
dos.close();
//Getting HTTP response code
int response = cc.getResponseCode();
//if response code is 200 / OK then read Inputstream
//HttpURLConnection.HTTP_OK is equal to 200
if(response == HttpURLConnection.HTTP_OK) {
DataInputStream = cc.getInputStream();
}
} catch (Exception e) {
Log.e(LOG_TAG, "Error in GetData", e);
}
return DataInputStream;
}
String ConvertStreamToString(InputStream stream) {
InputStreamReader isr = new InputStreamReader(stream);
BufferedReader reader = new BufferedReader(isr);
StringBuilder response = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
response.append(line);
}
} catch (IOException e) {
Log.e(LOG_TAG, "Error in ConvertStreamToString", e);
} catch (Exception e) {
Log.e(LOG_TAG, "Error in ConvertStreamToString", e);
} finally {
try {
stream.close();
} catch (IOException e) {
Log.e(LOG_TAG, "Error in ConvertStreamToString", e);
} catch (Exception e) {
Log.e(LOG_TAG, "Error in ConvertStreamToString", e);
}
}
return response.toString();
}
public void DisplayMessage(String a) {
TxtResult = (TextView) findViewById(R.id.response);
TxtResult.setText(a);
}
private class MakeNetworkCall extends AsyncTask<String, Void, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
DisplayMessage("Please Wait ...");
}
@Override
protected String doInBackground(String... arg) {
InputStream is = null;
String URL = arg[0];
Log.d(LOG_TAG, "URL: " + URL);
String res = "";
if (arg[1].equals("Post")) {
is = ByPostMethod(URL);
} else {
is = ByGetMethod(URL);
}
if (is != null) {
res = ConvertStreamToString(is);
} else {
res = "Something went wrong";
}
return res;
}
protected void onPostExecute(String result) {
super.onPostExecute(result);
DisplayMessage(result);
Log.d(LOG_TAG, "Result: " + result);
}
}
}
Alles anzeigen
Leider bekomme ich folgende Fehlermeldung im CatLog:
Suppressed: javax.net.ssl.SSLHandshakeException: Handshake failed
... 22 more
Suppressed: javax.net.ssl.SSLHandshakeException: Handshake failed
... 22 more
Suppressed: javax.net.ssl.SSLHandshakeException: Handshake failed
... 22 more
Caused by: javax.net.ssl.SSLProtocolException: SSL handshake terminated: ssl=0x9f33cc00: Failure in SSL library, usually a protocol error
error:100c5410:SSL routines:ssl3_read_bytes:SSLV3_ALERT_HANDSHAKE_FAILURE (external/boringssl/src/ssl/s3_pkt.c:972 0xa95bc680:0x00000001)
at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method)
at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:353)
... 21 more
Caused by: javax.net.ssl.SSLProtocolException: SSL handshake terminated: ssl=0x9f33cc00: Failure in SSL library, usually a protocol error
error:100c543e:SSL routines:ssl3_read_bytes:TLSV1_ALERT_INAPPROPRIATE_FALLBACK (external/boringssl/src/ssl/s3_pkt.c:972 0xa95bc680:0x00000001)
at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method)
at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:353)
... 21 more
Caused by: javax.net.ssl.SSLProtocolException: SSL handshake terminated: ssl=0x9f33cc00: Failure in SSL library, usually a protocol error
error:100c543e:SSL routines:ssl3_read_bytes:TLSV1_ALERT_INAPPROPRIATE_FALLBACK (external/boringssl/src/ssl/s3_pkt.c:972 0xa95bc680:0x00000001)
at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method)
at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:353)
... 21 more
Caused by: javax.net.ssl.SSLProtocolException: SSL handshake terminated: ssl=0x9f33cc00: Failure in SSL library, usually a protocol error
error:100c5410:SSL routines:ssl3_read_bytes:SSLV3_ALERT_HANDSHAKE_FAILURE (external/boringssl/src/ssl/s3_pkt.c:972 0xa95bc800:0x00000001)
error:100c009f:SSL routines:ssl3_get_server_hello:HANDSHAKE_FAILURE_ON_CLIENT_HELLO (external/boringssl/src/ssl/s3_clnt.c:771 0xa93747f7:0x00000000)
at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Nati
10-20 22:44:44.237 4511-4511/? E/Zygote: v2
Alles anzeigen
Wo mache ich was falsch oder wie muß ich anders machen damit es funktioniert ?
Danke
Ralf Kruppa