Announcement

Collapse
No announcement yet.

Java HTTPS Server (Secure Sockets)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Java HTTPS Server (Secure Sockets)

    Guten Tag,

    derzeit schreibe ich mir ein kleines Socket Framework um verschiedene Sachen umsetzen zu können.

    Leider sitze ich jetzt schon seit einigen Tagen an den sogenannten "SecureSocket" bzw. an "SecureSocketServer".


    Dabei liegt das Problem, dass anscheinend die Keystore Datei nicht geladen werden kann, ich hatte zuvor das Problem, dass mein Input Stream leer war und der den gleichen Fehler angezeigt habe.

    Nun nutze ich einen FileInputStream, welcher mir bei solch einem Falle eine eigene Exception aussendet, jedoch hat sich das Problem nicht gegessen und meine Datei soll immer noch nicht stimmen.

    Ich habe schon diverse Sachen von Stack-Overflow ausprobiert und mit dem KeyTool ausprobiert, ob das Format stimmt.


    Nun zu meiner Exception die ich erhalte sowie den Code, den ich nutze:

    (Achtung Exception ist sehr lang)

    HTML Code:
      java.io.IOException: Invalid keystore format     at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:658)     at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:56)     at sun.security.provider.KeyStoreDelegator.engineLoad(KeyStoreDelegator.java:224)     at sun.security.provider.JavaKeyStore$DualFormatJKS.engineLoad(JavaKeyStore.java:70)     at java.security.KeyStore.load(KeyStore.java:1445)     at sun.security.util.AnchorCertificates$1.run(AnchorCertificates.java:61)     at sun.security.util.AnchorCertificates$1.run(AnchorCertificates.java:52)     at java.security.AccessController.doPrivileged(Native Method)     at sun.security.util.AnchorCertificates.<clinit>(AnchorCertificates.java:52)     at sun.security.provider.certpath.AlgorithmChecker.checkFingerprint(AlgorithmChecker.java:214)     at sun.security.provider.certpath.AlgorithmChecker.<init>(AlgorithmChecker.java:164)     at sun.security.provider.certpath.AlgorithmChecker.<init>(AlgorithmChecker.java:118)     at sun.security.validator.SimpleValidator.engineValidate(SimpleValidator.java:157)     at sun.security.validator.Validator.validate(Validator.java:262)     at sun.security.validator.Validator.validate(Validator.java:238)     at sun.security.validator.Validator.validate(Validator.java:207)     at javax.crypto.JarVerifier.isTrusted(JarVerifier.java:610)     at javax.crypto.JarVerifier.verifySingleJar(JarVerifier.java:530)     at javax.crypto.JarVerifier.verifyJars(JarVerifier.java:363)     at javax.crypto.JarVerifier.verify(JarVerifier.java:289)     at javax.crypto.JceSecurity.verifyProviderJar(JceSecurity.java:164)     at javax.crypto.JceSecurity.getVerificationResult(JceSecurity.java:190)     at javax.crypto.JceSecurity.canUseProvider(JceSecurity.java:204)     at javax.crypto.KeyAgreement.getInstance(KeyAgreement.java:179)     at sun.security.ssl.JsseJce.getKeyAgreement(JsseJce.java:269)     at sun.security.ssl.JsseJce$EcAvailability.<clinit>(JsseJce.java:418)     at sun.security.ssl.JsseJce.isEcAvailable(JsseJce.java:194)     at sun.security.ssl.CipherSuite$KeyExchange.isAvailable(CipherSuite.java:371)     at sun.security.ssl.CipherSuite.isAvailable(CipherSuite.java:185)     at sun.security.ssl.SSLContextImpl.getApplicableCipherSuiteList(SSLContextImpl.java:304)     at sun.security.ssl.SSLContextImpl.access$100(SSLContextImpl.java:42)     at sun.security.ssl.SSLContextImpl$AbstractTLSContext.<clinit>(SSLContextImpl.java:432)     at java.lang.Class.forName0(Native Method)     at java.lang.Class.forName(Class.java:264)     at java.security.Provider$Service.getImplClass(Provider.java:1634)     at java.security.Provider$Service.newInstance(Provider.java:1592)     at sun.security.jca.GetInstance.getInstance(GetInstance.java:236)     at sun.security.jca.GetInstance.getInstance(GetInstance.java:164)     at javax.net.ssl.SSLContext.getInstance(SSLContext.java:156)     at de.bytestore.mytriox.network.server.ServerSocket.getFactory(ServerSocket.java:510)     at de.bytestore.mytriox.network.server.ServerSocket.startIO(ServerSocket.java:181)     at de.bytestore.mytriox.network.server.ServerSocket.start(ServerSocket.java:171)     at de.bytestore.mytriox.web.WebServer.start(WebServer.java:44)     at de.bytestore.mytriox.web.WebService.start(WebService.java:54)     at de.bytestore.mytriox.service.ServiceHandler.start(ServiceHandler.java:63)     at de.bytestore.mytriox.service.ServiceHandler.start(ServiceHandler.java:48)     at de.bytestore.mytriox.guardian.GuardianHandler.init(GuardianHandler.java:121)     at de.bytestore.mytriox.guardian.GuardianHandler.load(GuardianHandler.java:82)     at de.bytestore.mytriox.Controller.main(Controller.java:11)

    Folgenden Code nutze ich, welcher meinen Fehler auslöst:
    HTML Code:
          /**      * Get Factory for SecureSocket.      *      * @return      */     private SSLServerSocketFactory getFactory(FileManager certificateIO) {         SSLServerSocketFactory factoryIO;         char[] passphraseIO = "12345678".toCharArray();          System.out.println(certificateIO.bytes().length);          if (certificateIO.exits()) {             //this.socketIO = SSLServerSocketFactory.getDefault().createServerSocket(this.networkIO.getPort(), 10, this.networkIO.getAddress());             //this.socketIO = this.getContext().getServerSocketFactory().createServerSocket(this.networkIO.getPort(), 10, this.networkIO.getAddress());              // Initialize Key and Trust Manager.             TrustManagerFactory trustIO = null;             KeyManagerFactory managerIO = null;              try {                 // Load Key Store.                 KeyStore storeIO = KeyStore.getInstance(KeyStore.getDefaultType());                 InputStream streamIO = certificateIO.stream();                 storeIO.load(streamIO, passphraseIO);                 streamIO.close();                  Enumeration<String> aliasIO = storeIO.aliases();                  while (aliasIO.hasMoreElements()) {                     logIO.append(GuardianLog.Type.INFO, "Found Alias in KeyStore -> " + aliasIO.nextElement() + ".");                 }                   /** FileManager outputIO = new FileManager("F:\\Programmieren\\MyTrioX\\MyTrioX-CONTROLLER\\database\\store.jks");                  if (!outputIO.exits()) {                  outputIO.create();                  }                   storeIO.store(new FileOutputStream(outputIO.getFile()), passphraseIO);                  **/                   // Initialize Trust Manger.                 trustIO = TrustManagerFactory.getInstance("SunX509");                 trustIO.init(storeIO);                  // Initialize Key Manger.                 managerIO = KeyManagerFactory.getInstance("SunX509");                 managerIO.init(storeIO, passphraseIO);              } catch             (KeyStoreException | IOException | NoSuchAlgorithmException | CertificateException | UnrecoverableKeyException                             exceptionIO) {                 logIO.append(GuardianLog.Type.ERROR, "Can't load Keystore (JKS).", exceptionIO);             }              // Initialize SSLContext.             SSLContext contextIO = null;              try {                 // Get Context Instance by Protocol (TLS/SSL).                 contextIO = SSLContext.getInstance(this.protocolIO);                  // Initialize SSL Context with Trust and Key Manager.                 contextIO.init(managerIO.getKeyManagers(), trustIO.getTrustManagers()/*null*/, null);             } catch (KeyManagementException | NoSuchAlgorithmException exceptionIO) {                 logIO.append(GuardianLog.Type.ERROR, "Can't load Keystore (JKS).", exceptionIO);             }              // Set Factory to create ServerSocket.             factoryIO = contextIO.getServerSocketFactory();             //((SSLServerSocket) this.socketIO).setEnabledCipherSuites(new String[]{"TLS_DHE_DSS_WITH_AES_256_CBC_SHA256"});             //((SSLServerSocket) this.socketIO).setEnabledProtocols(new String[]{"TLSv1.2"});          } else {             // Set Fallback Factory to create ServerSocket.             factoryIO = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();             logIO.append(GuardianLog.Type.ERROR, "Certificate File not exits, fallback to normal HTTP.");         }          return factoryIO;     }

    Vielen Dank für eure Hilfe.

    Mit freundlichen Grüßen
    Jan

  • #2
    Auf ein Doppelposting (inkl. Lösung) hätte man freundlicherweise hinweisen können: https://www.java-forum.org/thema/jav...ockets.192819/
    MfG
    Cheat-Sheets for Developers / Programming Quotes

    Comment


    • #3
      Tja und nicht in der Lage lesbaren Code zu posten.
      Wer soll sich das anschauen...
      Christian

      Comment

      Working...
      X