# Verständnisproblem TLS



## Thallius (10. Apr 2019)

Hallo,

ich habe eine Java Client App welche sich Daten aus einem Webservice holt. Dieses soll natürlich per HTTPS geschehen. Dazu habe ich einen Webspace mit TLS Zertifikat bei Strato angemietet. Damit ich nun aber mit HTTPS auf den Webservice zugreifen kann, muss ich der App das Zertifikat bekannt machen oder ich bekomme einen Fehler das der Hostname nicht verifiziert werden kann. Das Zertifikat bei Strato läuft aber immer nur 1 Jahr. Das würde ja nun bedeuten, dass ich jedes Jahr eine neue App rausbringen muss damit sie weiterhin mit dem neuen Zertifikat funktioniert. Alternativ kann ich auch mit ein paar Tricks den Hostname Verifier abschalten. Aber das kann ja nicht der Weisheit letzer Schluß sein.

Also wie macht man das richtig oder was habe ich hier nicht richtig verstanden wie das funktioniert?

Gruß

Claus


----------



## httpdigest (10. Apr 2019)

Zertifikate werden für Hostnamen ausgestellt und dienen dazu, dem Client zu beweisen, dass er mit dem richtigen Server spricht, also der Server der ist, der er vorgibt, zu sein. Wenn es sich dabei um ein durch eine vertrauenswürdige Certificate Authority (CA) ausgestelltes Zertifikat für deine Webspace URL handelt, dann brauchst du das Zertifikat nirgendwo hinzufügen/installieren. Es dient dann ja nur dazu, dass du gesicherte HTTPS Verbindungen zu deinem Webspace herstellen kannst.
Aber ein Webspace ist ja nunmal auch kein Webservice. Ein WebService ist ein Programm, das irgendwo läuft und unter einer URL erreichbar ist. Also, was genau soll dein WebService tun und wo läuft dieser? Oder ich habe das Strato Webspace Modell noch nicht ganz verstanden.


----------



## Thallius (10. Apr 2019)

Ich denke dann liegt es daran, dass Strato mir kein offizielles Zertifikat verkauft hat für meine Domain. Das fände ich dann aber schon ziemlich frech...

Du kannst Dir das Zertifikat ja mal ansehen





__





						www.geccservice.com
					





					www.geccservice.com
				




Gruss

Claus


----------



## httpdigest (10. Apr 2019)

Sieht aber gut aus. Java 11.0.1 vertraut dem Zertifikat (und Chrome auch):

```
import java.net.*;
import java.security.cert.*;
import javax.net.ssl.*;
public class CertTest {
  public static void main(String[] args) throws Exception {
    HttpsURLConnection conn = (HttpsURLConnection) new URL(
        "https://www.geccservice.com/").openConnection();
    System.out.println(conn);
    print_https_cert(conn);
  }
  private static void print_https_cert(HttpsURLConnection con) throws Exception {
    System.out.println("Response Code : " + con.getResponseCode());
    System.out.println("Cipher Suite : " + con.getCipherSuite());
    System.out.println("\n");
    Certificate[] certs = con.getServerCertificates();
    for (Certificate cert : certs) {
      System.out.println("Cert Type : " + cert.getType());
      System.out.println("Cert Hash Code : " + cert.hashCode());
      System.out.println("Cert Public Key Algorithm : "
          + cert.getPublicKey().getAlgorithm());
      System.out.println("Cert Public Key Format : "
          + cert.getPublicKey().getFormat());
      System.out.println("\n");
    }
  }
}
```


----------



## mihe7 (10. Apr 2019)

Das Zertifikat ist in Ordnung. Vermutung: es wird SNI benötigt und Deine Anwendung sendet den Servernamen nicht mit.


----------



## Thallius (11. Apr 2019)

Dann wird es wohl eher daran liegen, dass ich mit Java6 arbeiten muss....


----------



## mihe7 (11. Apr 2019)

Thallius hat gesagt.:


> Dann wird es wohl eher daran liegen, dass ich mit Java6 arbeiten muss....


Java 6 :-o Dann könnte auch einfach das Zertifikat der Root CA in Deinem Keystore fehlen bzw. abgelaufen sein.


----------



## mihe7 (11. Apr 2019)

Nachtrag: https://bugs.java.com/bugdatabase/view_bug.do?bug_id=6985179 - würde ich mal so interpretieren, dass mit 6u115 SNI auch unter Java 6 unterstützt wird.


----------



## Thallius (11. Apr 2019)

Ok, der Auftraggeber steht bei 6u43 oder sowas..... Manchmal ist Austragsarbeit ein Kreuz...

Trotzdem schonmal Danke

Claus


----------



## JuKu (11. Apr 2019)

Thallius hat gesagt.:


> Dann wird es wohl eher daran liegen, dass ich mit Java6 arbeiten muss....



Wie @mihe7 schon sagte: Dann passt das Root CA zu 99,99% nicht.
Gerade in Java 8 und Java 11 ist da sehr viel in dieser Hinsicht passiert.
Evtl. solltest du mit deinem Auftraggeber mal sprechen, dass er da ne Sicherheitslücke in seinem Haus besitzt, denn Java 6 wird schon seit Jahren nicht mehr supportet.


----------



## mrBrown (11. Apr 2019)

JuKu hat gesagt.:


> Evtl. solltest du mit deinem Auftraggeber mal sprechen, dass er da ne Sicherheitslücke in seinem Haus besitzt, denn Java 6 wird schon seit Jahren nicht mehr supportet.


Wenn man genug zahlt schon...


----------



## JuKu (13. Apr 2019)

mrBrown hat gesagt.:


> Wenn man genug zahlt schon...



@mrBrown Echt? Ich dachte Oracle hat das JRE 6 jetzt gänzlich eingestampft, inkl. den Extended / Security Support?
Oder redest du von einer anderen JVM?


----------



## mrBrown (13. Apr 2019)

JuKu hat gesagt.:


> @mrBrown Echt? Ich dachte Oracle hat das JRE 6 jetzt gänzlich eingestampft, inkl. den Extended / Security Support?
> Oder redest du von einer anderen JVM?


Stimmt, hatte von Oracle nur das letzte Update von Ende letzten Jahres im Kopf, das dürfte auch das generell letzte von denen gewesen sein.
Bei Azul und Redhat müsste das auch keinen Support mehr bekommen, ob irgendwo anders weiß ich nicht


----------

