Java 如何在端口80上执行SSL操作

Java 如何在端口80上执行SSL操作,java,ssl,Java,Ssl,我有一个server.java文件,如下所示: import javax.net.ssl.*; import java.io.*; //***************** public class Server { public static void main(String[] args) { try { SSLServerSocketFactory sslserversocketfactory = (SSLServerSocketFac

我有一个server.java文件,如下所示:

import javax.net.ssl.*;
import java.io.*;
//*****************
public class Server
{
    public static void main(String[] args)
    {
        try {
            SSLServerSocketFactory sslserversocketfactory = (SSLServerSocketFactory)SSLServerSocketFactory.getDefault();
            SSLServerSocket sslserversocket =(SSLServerSocket)sslserversocketfactory.createServerSocket(80);

            SSLSocket sslsocket = (SSLSocket)
            sslserversocket.accept();

            InputStream is = sslsocket.getInputStream();
            InputStreamReader isr = new
            InputStreamReader(is);

            BufferedReader br = new BufferedReader(isr);
            String string = null;

            while ((string = br.readLine()) != null)
            {
            System.out.println(string);
            System.out.flush();
            }
        } 

        catch (Exception e){
            e.printStackTrace();
        }
    }
}
import javax.net.ssl.*;
import java.io.*;
//*****************
public class Client
{
    public static void main(String[] args)
    {
        try {
            SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
            SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket("127.0.0.1", 80);

            InputStream is = System.in;
            InputStreamReader isr = new InputStreamReader(is);

            BufferedReader br = new BufferedReader(isr);
            OutputStream os = sslsocket.getOutputStream();

            OutputStreamWriter osw = new OutputStreamWriter(os);
            BufferedWriter bw = new BufferedWriter(osw);

            String string = null;
            while ((string = br.readLine()) != null)
            {
            bw.write(string + '\n');
            bw.flush();
            }
        }
        catch (Exception e){
            e.printStackTrace();
        }
    }
}
和Client.java文件,如下所示:

import javax.net.ssl.*;
import java.io.*;
//*****************
public class Server
{
    public static void main(String[] args)
    {
        try {
            SSLServerSocketFactory sslserversocketfactory = (SSLServerSocketFactory)SSLServerSocketFactory.getDefault();
            SSLServerSocket sslserversocket =(SSLServerSocket)sslserversocketfactory.createServerSocket(80);

            SSLSocket sslsocket = (SSLSocket)
            sslserversocket.accept();

            InputStream is = sslsocket.getInputStream();
            InputStreamReader isr = new
            InputStreamReader(is);

            BufferedReader br = new BufferedReader(isr);
            String string = null;

            while ((string = br.readLine()) != null)
            {
            System.out.println(string);
            System.out.flush();
            }
        } 

        catch (Exception e){
            e.printStackTrace();
        }
    }
}
import javax.net.ssl.*;
import java.io.*;
//*****************
public class Client
{
    public static void main(String[] args)
    {
        try {
            SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
            SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket("127.0.0.1", 80);

            InputStream is = System.in;
            InputStreamReader isr = new InputStreamReader(is);

            BufferedReader br = new BufferedReader(isr);
            OutputStream os = sslsocket.getOutputStream();

            OutputStreamWriter osw = new OutputStreamWriter(os);
            BufferedWriter bw = new BufferedWriter(osw);

            String string = null;
            while ((string = br.readLine()) != null)
            {
            bw.write(string + '\n');
            bw.flush();
            }
        }
        catch (Exception e){
            e.printStackTrace();
        }
    }
}
我还创建了自己的证书,如下所示:

C:\Temp>keytool -genkey -keystore myCertificate -keyalg RSA
Enter keystore password: abcdefg
Re-enter new password: abcdefg
What is your first and last name?
[Unknown]: first last
What is the name of your organizational unit?
[Unknown]: cs
What is the name of your organization?
[Unknown]: stackoverflow
What is the name of your City or Locality?
[Unknown]: NYC
What is the name of your State or Province?
[Unknown]: NY
What is the two-letter country code for this unit?
[Unknown]: us
Is CN=first last, OU=cs, O=stackoverflow, L=NYC, ST=NY, C=us correct?
[no]: yes
Enter key password for <mykey>
(RETURN if same as keystore password):

我担心的是,如果我将端口从80更改为其他类型,代码工作得非常好,但我必须专门处理这个端口本身。证书和两个java文件位于同一文件夹中。你们能帮我找到一种在端口80上执行SSL操作的方法吗

SSL正在端口443上运行。它是默认的,就像80一样,在地址栏上没有显示。

我找到了一种方法

基本上,我所做的是使用java的keystore生成keystore.jks文件,然后使用SSLContext使我的keystore证书有效,并因此在端口80上执行SSL


谢谢大家的帮助。

我知道它没有为@Java1配置,但我想知道一种方法来实现这个操作works@BalusC你能帮我算出这个数字吗?我想使用端口80@lidth执行操作。这不是浏览器代码。OP编写了自己的服务器/客户端代码。对不起,我没有认真阅读。请尝试阅读