Safari 和 Chrome 无法重定向到本地 HTTPS 服务器



我对编码比较陌生。我正在尝试创建一个本地HTTPS服务器,以便在使用OAuth 2.0(用于桌面应用程序)对授权服务器进行身份验证后重定向最终用户。

当授权服务器重定向到Safari上的HTTPS服务器时,Safari无法与服务器"localhost"建立安全连接。在Chrome上,浏览器会抛出"ERR_CONNECTION_RESET.">

下面是用来生成服务器的代码:
public static void localServer() throws IOException, NoSuchAlgorithmException {
HttpsServer server = HttpsServer.create(new InetSocketAddress(80), 0);
SSLContext sslContext = SSLContext.getInstance("TLSv1.3");
server.setHttpsConfigurator(new HttpsConfigurator(sslContext) {});
server.createContext("/", new MyHandler());
server.setExecutor(null);
server.start();
}
static class MyHandler implements HttpHandler {
String requestMethod = exchange.getRequestMethod();
System.out.println(requestMethod);
Headers requestHeaders = exchange.getRequestHeaders();
if (!requestHeaders.isEmpty()) {
Iterator it = requestHeaders.entrySet().iterator();
while (it.hasNext()) {
Map.Entry obj = (Entry) it.next();
System.out.println(obj.getKey() + ":" + obj.getValue());
}
}
InputStream is = exchange.getRequestBody();
ByteArrayOutputStream requestBodyOutputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length;
while ((length = is.read(buffer)) != -1) {
requestBodyOutputStream.write(buffer, 0 , length);
}
System.out.println("Request Body: " + requestBodyOutputStream.toString(StandardCharsets.UTF_8));
String response = "This is the response";
exchange.sendResponseHeaders(200, response.length());
OutputStream os = exchange.getResponseBody();
os.write(response.getBytes());
os.close();
}
}

当我把HttpServer变成HttpServer,并删除SSLContext sslContext = SSLContext.getInstance("TLSv1.3");server.setHttpsConfigurator(new HttpsConfigurator(sslContext) {});,服务器工作;但是,我希望服务器是httpserver。

我该如何解决这个问题?提前谢谢。

HTTPS协议的端口为443。您使用了为HTTP保留的80。如果你打开一个HTTPS url,浏览器会使用443。

最新更新