5

httpとhttpsの両方をサポートする必要があるJavaソケットを使用して、単純なWebサーバーを作成しようとしています。しかし、一度に達成できるのは 1 つだけです。http @ ポート 80 と https @ ポート 443 の両方を同時にサポートするロジックが必要です。
これは、sslsocket を使用した HTTPS サーバーのサンプル コードです。シンプルな ServerSocket を使用して HTTP サーバーを実現できます。

public class HttpsServer {
    public static void main(String[] args) {
    try {
        KeyStore ks = KeyStore.getInstance("PKCS12");
        ks.load(new FileInputStream("/opt/p12file.p12"), "p12pass".toCharArray());
        KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
        kmf.init(ks, "p12pass".toCharArray());

        SSLContext sc = SSLContext.getInstance("TLS");
        sc.init(kmf.getKeyManagers(), null, null);

        SSLServerSocketFactory ssf = sc.getServerSocketFactory();
        SSLServerSocket s = (SSLServerSocket) ssf.createServerSocket(8080);

        while (true) {
            SSLSocket c = (SSLSocket) s.accept();
            BufferedWriter w = new BufferedWriter(new OutputStreamWriter(c.getOutputStream()));
            w.write("HTTP/1.0 200 OK");
            w.newLine();
            w.write("Content-Type: text/html");
            w.newLine();
            w.newLine();
            w.write("<html><body><h1>Https Server Works</h1></body></html>");
            w.newLine();
            w.flush();
            w.close();
            c.close();
        }
    }
    catch (Exception e) {
        e.printStackTrace();
    }
}

}

誰でも私を助けてもらえますか??

4

2 に答える 2

2

JavaでSSLサーバーソケットがhttpとhttpsの両方をサポートするようにするにはどうすればよいですか?

できません。HTTP はプレーンテキストであり、SSLServerSocketサポートできません。

httpとhttpsの両方をサポートする必要があるJavaソケットを使用して、単純なWebサーバーを作成しようとしています。しかし、一度に達成できるのは 1 つだけです。http @ ポート 80 と https @ ポート 443 の両方を同時にサポートするロジックが必要です。

必要なもの:

  • ServerSocket80 でリッスンする平文
  • 443でのSSLServerSocketリスニング
  • これらのそれぞれの受け入れループ スレッド
  • 受け入れられたソケットごとの接続スレッド。

main()静的メソッド内でそれを行うことは決してありません。Java チュートリアルの「カスタム ネットワーク」セクションを読んでから、JSSE リファレンス ガイドを読むことをお勧めします。

もちろん、RFC 2616 HTTP 1.1 もよく確認する必要があります。正しく実装することは非常に重要です。

コメントで示唆されているように、実際には既製のものを使用する必要があります。

于 2015-05-28T08:27:24.850 に答える