相关疑难解决方法(0)

如何从一个端口为Jetty提供https和http?

(我知道这是一个重复的问题,但原始的海报问错了原因.我并不是说我正确地问它,但是让我们看看.)

我们有一个运行在非标准端口号上的Web服务.尽管用户似乎能够记住端口号,但偶尔他们会输入http:而不是https:.有人问我们是否可以在该端口上提供HTTP,然后在同一端口上将它们重定向到HTTPS.这听起来很邪恶......我喜欢可用性但感觉浏览器的工作应该是这样做的吗?

我见过的一个解决方案是"在Jetty面前编写自己的代理".这个解决方案可行,但我不认为它会运行良好,因为我不相信我能编写一个与Jetty本身一样高效的代理.此外,即使代理本身有效,所有数据仍然需要额外跳跃,这无论如何都会保证减慢流量.

有比这更好的方法吗?也许Jetty本身有一些协议检测逻辑可以被楔入的地方,这将允许利用它们的速度,同时还删除代理将引入的额外跳.

java https port http jetty

15
推荐指数
3
解决办法
1万
查看次数

正确关闭SSLSocket

我想在Java中实现SSL代理.我基本上打开两个套接字browser-proxy,proxy-server然后运行两个线程来写入proxy-server它们读取的内容browser-proxy,反之亦然.每个线程看起来像这样:

while (true) {
   nr = in.read(buffer);
   if (nr == -1) System.out.println(sockin.toString()+" EOF  "+nr);
   if (nr == -1) break;
   out.write(buffer, 0, nr);
}
sockin.shutdownInput();
sockout.shutdownOutput(); // now the second thread will receive -1 on read
Run Code Online (Sandbox Code Playgroud)

每个线程只关闭输入套接字,以便最终关闭两个套接字.

但是,如果我想使用它,我该怎么办SSLSocket?似乎shutdownOutput/Input那里不支持这些方法.这是我得到的例外.

Exception in thread "Thread-35" java.lang.UnsupportedOperationException: \
The method shutdownInput() is not supported in SSLSocket
    at com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.shutdownInput(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

我想出的是:

try {
    while (true) {
       nr = in.read(buffer);
       if (nr == -1) System.out.println(sockin.toString()+" …
Run Code Online (Sandbox Code Playgroud)

java sockets ssl

8
推荐指数
1
解决办法
1万
查看次数

java中如何让SSL服务器socket同时支持http和https?

我正在尝试使用 java 套接字创建简单的 Web 服务器,它应该支持 http 和 https。但我一次只能实现一个。我需要同时支持 http @ port 80 和 https @ port 443 的逻辑。
这是使用 sslsocket 的 HTTPS 服务器的示例代码。我们可以使用简单的ServerSocket来实现HTTP Server。

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 …
Run Code Online (Sandbox Code Playgroud)

java sockets sslsocketfactory

5
推荐指数
1
解决办法
5616
查看次数

标签 统计

java ×3

sockets ×2

http ×1

https ×1

jetty ×1

port ×1

ssl ×1

sslsocketfactory ×1