Enable SSL with -useSSL or implicitly with port 992

This commit is contained in:
dotmg 2026-01-16 16:31:37 +01:00
parent b222a89a2b
commit 809ec6989e
3 changed files with 62 additions and 2 deletions

View file

@ -42,7 +42,7 @@ public class Main {
private static void usageError(String msg) {
System.err.println(msg);
System.err.println("Usage: [-3dFX] /*[-PSHBTNCHC]*/ [-STRPCCMD] [-altFKeyRemap]" +
" [-maximized] [-cp codepage] [-devName name]" +
" [-maximized] [-cp codepage] [-devName name] [-useSSL|noSSL]" +
" [-autoLogon <fieldsCount>;<usrFieldLabel>;<pwdFieldLabel>;<user>;<passwd>]" +
" host-name");
System.err.println("Supported code pages:");
@ -86,6 +86,7 @@ public class Main {
boolean pUse3dFX = false;
boolean pAltFKeyRemap = false;
int pUseSSL = -1;
//boolean pPSHBTNCHC = false;
boolean pSTRPCCMD = false;
boolean pMaximized = false;
@ -111,6 +112,10 @@ public class Main {
pMaximized = true;
else if ("-altFKeyRemap".equalsIgnoreCase(arg))
pAltFKeyRemap = true;
else if ("-noSSL".equalsIgnoreCase(arg))
pUseSSL = 0;
else if ("-useSSL".equalsIgnoreCase(arg))
pUseSSL = 1;
else if ("-cp".equalsIgnoreCase(arg))
expectCP = true;
else if ("-devName".equalsIgnoreCase(arg))
@ -150,6 +155,7 @@ public class Main {
usageError("A code page is expected");
final boolean altFKeyRemap = pAltFKeyRemap;
final int useSSL = pUseSSL;
final boolean use3dFX = pUse3dFX;
// final boolean enablePSHBTNCHC = pPSHBTNCHC;
final boolean enableSTRPCCMD = pSTRPCCMD;
@ -187,6 +193,7 @@ public class Main {
em.setStrPcCmdEnabled(enableSTRPCCMD);
em.setAltFKeyRemap(altFKeyRemap);
em.setUseSSL(useSSL);
em.setCodePage(codePage);
if (deviceName != null)

View file

@ -345,6 +345,7 @@ public class XI5250Emulator extends XI5250Crt implements Serializable {
private String ivHost;
private boolean ivAltFKeyRemap;
private int ivUseSSL;
private boolean ivStrPcCmdEnabled;
private boolean ivReceivedStrPcCmd;
@ -590,11 +591,19 @@ public class XI5250Emulator extends XI5250Crt implements Serializable {
ivAltFKeyRemap = value;
firePropertyChange(ALTFKEY_REMAP, old, ivAltFKeyRemap);
}
public void setUseSSL(int value) {
ivUseSSL = value;
}
public boolean getAltFKeyRemap() {
return ivAltFKeyRemap;
}
public int getUseSSL() {
return ivUseSSL;
}
/**
* @param value - if true the STRPCCMD order is enabled.
*/
@ -770,6 +779,8 @@ public class XI5250Emulator extends XI5250Crt implements Serializable {
if (ivTelnetEnv != null)
ivTelnet.setEnvironment(ivTelnetEnv);
ivTelnet.setUseSSL(ivUseSSL);
ivTelnet.setLocalReqFlag(XITelnet.TELOPT_BINARY, true);
ivTelnet.setLocalReqFlag(XITelnet.TELOPT_TTYPE, true);
ivTelnet.setLocalReqFlag(XITelnet.TELOPT_EOR, true);

View file

@ -35,6 +35,12 @@ import java.io.InputStream;
import java.io.InterruptedIOException;
import java.io.OutputStream;
import java.net.Socket;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import javax.net.ssl.SSLSocketFactory;
import java.security.cert.X509Certificate;
import java.util.NoSuchElementException;
import java.util.StringTokenizer;
import java.util.logging.Level;
@ -163,6 +169,7 @@ public class XITelnet {
private String ivTermType;
private String ivEnvironment;
private int ivUseSSL;
transient private int ivIACParserStatus = SIAC_START;
@ -301,7 +308,15 @@ public class XITelnet {
ivEnvironment = aEnv;
}
public void setUseSSL(int aUseSSL) {
ivUseSSL = aUseSSL;
}
public int getUseSSL() {
if ((ivUseSSL == -1) && (ivPort == 992))
return 1;
return ivUseSSL;
}
/**
*/
public String getEnvironment() {
@ -354,6 +369,22 @@ public class XITelnet {
return ivRemoteFlags[flag];
}
public SSLSocketFactory getTrustAllFactory() throws Exception {
// 1. Créer un TrustManager qui ne vérifie rien
TrustManager[] trustAllCerts = new TrustManager[] {
new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() { return null; }
public void checkClientTrusted(X509Certificate[] certs, String authType) {}
public void checkServerTrusted(X509Certificate[] certs, String authType) {}
}
};
// 2. Initialiser le contexte SSL avec ce TrustManager
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
return sc.getSocketFactory();
}
/**
* Tryes to establish a telnet connection.
@ -368,7 +399,13 @@ public class XITelnet {
connecting();
try {
ivSocket = new Socket(ivFirstHost, ivPort);
if (getUseSSL() == 1) {
SSLSocketFactory factory = getTrustAllFactory(); //(SSLSocketFactory) SSLSocketFactory.getDefault();
ivSocket = factory.createSocket(ivFirstHost, ivPort);
((SSLSocket)ivSocket).startHandshake(); // Déclenche le chiffrement
} else {
ivSocket = new Socket(ivFirstHost, ivPort);
}
ivSocket.setKeepAlive(true);
ivIn = ivSocket.getInputStream();
@ -396,6 +433,11 @@ public class XITelnet {
catch (IOException ex) {
catchedIOException(ex);
}
catch (Exception e) {
System.err.println("Erreur connexion l429 " + e.getMessage());
e.printStackTrace();
return;
}
}