gpt4 book ai didi

java - 连接到 FTPS 服务器

转载 作者:搜寻专家 更新时间:2023-11-01 01:56:55 24 4
gpt4 key购买 nike

我编写 FTPS 服务器,在 AUTH TLS 命令后我的 ssl 连接出现问题。简单示例:

try
{
int ServerPort = 21;
ServerSocket FtpExServer = new ServerSocket(ServerPort);
while(true)
{
Socket S = FtpExServer.accept();
InputStreamReader ISR = new InputStreamReader(S.getInputStream());
OutputStreamWriter OSW = new OutputStreamWriter(S.getOutputStream());
BufferedReader ClientSocketReader = new BufferedReader(ISR);
PrintWriter ClientSocketWriter = new PrintWriter(OSW, true);

ClientSocketWriter.println("220 Welcome to FTP server.");
print(ClientSocketReader.readLine());
ClientSocketWriter.println("234 AUTH TLS successful");

char[] passphrase = "pass".toCharArray();
char[] cpassphrase = "cpass".toCharArray();
KeyStore keystore = KeyStore.getInstance("JKS");
keystore.load(new FileInputStream("keystore.jks"), passphrase);
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(keystore, cpassphrase);
SSLContext context = SSLContext.getInstance("TLS");
KeyManager[] keyManagers = kmf.getKeyManagers();
context.init(keyManagers, null, null);
SSLServerSocketFactory ssf = context.getServerSocketFactory();

SSLServerSocket ss = (SSLServerSocket) ssf.createServerSocket(990);
ss.setSoTimeout(2000);
SSLSocket s = (SSLSocket)ss.accept();

ISR = new InputStreamReader(s.getInputStream());
OSW = new OutputStreamWriter(s.getOutputStream());
ClientSocketReader = new BufferedReader(ISR);
ClientSocketWriter = new PrintWriter(OSW, true);

ClientSocketWriter.println("234 AUTH TLS successful");
print(ClientSocketReader.readLine());
ClientSocketWriter.println("331 Password required for smie");
print(ClientSocketReader.readLine());
ClientSocketWriter.println("230 User smie logged in");
print(ClientSocketReader.readLine());
ClientSocketWriter.println("215 UNIX Type: L8");
print(ClientSocketReader.readLine());
ClientSocketWriter.println("550 Command not suported.");
}
}
catch(Exception e)
{
print(e);
}

描述:FTP 客户端(例如 MoveITFreely)连接到端口 21 上的服务器。发送命令“AUTH TLS”后,服务器发送“234 AUTH TLS 成功”。现在客户端必须连接到端口 990(?) 上的服务器,但客户端不连接并出现超时异常。

我做错了什么?

最佳答案

有两种方法可以将 SSL 添加到 FTP。

第一种方法称为隐式 SSL。表示服务器监听990端口,当客户端连接时,首先进行SSL/TLS协商,然后将建立的连接作为命令 channel 进行通信(对于数据通道,SSL握手也在a中进行)类似的方式)。

第二种方法是您尝试使用的方法。它称为显式 SSL。客户端连接到端口 21,发送 AUTH TLS 并在现有连接上启动 SSL 协商。数据通道可以安全或不安全,具体取决于您的需要(您使用 PROT 命令指定)。

你混合了这些方法。我建议你阅读 detailed explanation in Wikipedia在进一步之前。然后阅读 RFC for explicit TLS .

更新:您还需要 SSLClientSocket,而不是 SSLServerSocket。

关于java - 连接到 FTPS 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6854975/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com