我怎么能从java程序运行本地jar文件?
jar文件不在Java调用者程序的类路径中.
我在java中使用SSLServerSocket和java.ssl包中的其他类测试SSL.当我运行以下代码时,我得到异常java.io.IOException:无效的密钥库格式.我的代码:
package testing;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.security.KeyStore;
import javax.net.ServerSocketFactory;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLServerSocket;
import javax.net.ssl.TrustManager;
public class SSLServerTest {
public static void main(String[] args) {
try {
int port = 3000;
SSLContext sc = SSLContext.getInstance("TLSv1.2");
KeyStore ks = KeyStore.getInstance("JKS");
InputStream ksIs = new FileInputStream("key.txt");
try {
ks.load(ksIs, "Bennett556".toCharArray());
} finally {
if (ksIs != null) {
ksIs.close();
}
}
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(ks, "Bennett556".toCharArray());
sc.init(kmf.getKeyManagers(), new TrustManager[] …Run Code Online (Sandbox Code Playgroud) 我只是四处寻找如何制作一个可以用Java嗅探网络流量的程序,但我找不到任何东西.我想知道是否有任何方法可以查看网络流量.我听说过一个Socket的想法,但是我不明白这是怎么回事.所以无论如何,只是寻找API或自己编写它的方法.
编辑: 我很乐意喜欢API,但我还想澄清使用Socket嗅探流量的方法.
我正在尝试实现最简单的HTTPS通信程序.网上有很多例子,但我无法成功运行它们.
这是一个例子:
public class ReadHttpsURL1 {
static final int HTTPS_PORT = 443;
public static void main(String argv[]) throws Exception {
String url = "www.sun.com";
System.setProperty("java.net.useSystemProxies", "true");
SocketFactory factory = SSLSocketFactory.getDefault();
Socket socket = factory.createSocket(url, HTTPS_PORT);
BufferedWriter out = new BufferedWriter(new
OutputStreamWriter(socket.getOutputStream()));
BufferedReader in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
out.write("GET / HTTP/1.0\n\n");
out.flush();
String line;
StringBuffer sb = new StringBuffer();
while((line = in.readLine()) != null) {
sb.append(line);
}
out.close();
in.close();
System.out.println(sb.toString());
}
}
Run Code Online (Sandbox Code Playgroud)
它挂起了大约一分钟的时间(我相信由于服务器端超时)并且失败并出现错误.挂断电话
Socket socket = factory.createSocket(url, HTTPS_PORT);
Run Code Online (Sandbox Code Playgroud)
错误是
Exception …Run Code Online (Sandbox Code Playgroud) 首先,在我问之前,我想指出这个问题是为了教育.我想知道扩展我对Java和网络安全的理解(现在很少).
你如何使用Java进行网络安全和反击?我一直在使用服务器/套接字一段时间(对于非系统安全性的东西),但我不太明白我在做什么.当然,我应该学习网络,但从哪里开始?有一个协议的一切,有协议有协议.为了进一步扩展,您如何使用Java来说,端口嗅探,捕获数据包或远程杀死/打开端口?
我想更充分地说出这个问题; 有没有人知道我可以看到的任何好的来源,以更深入地了解/研究Java如何处理网络安全和反黑客攻击和恶意软件遏制?
我知道要加载证书使用,我需要打电话KeyStore.load(InputStream, char[]);.如果需要密码,如何在客户端加载证书?连接到Google时我不需要这个,但我想使用信任管理器来验证Google证书.我也无法在SSLServerSocket不加载证书的情况下进行连接.
编辑:添加代码:
package testing;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.security.KeyStore;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
public class SSLClientTest {
public static void main(String[] args) {
int port = 443;
String host = "google.com";
try {
SSLContext sc = SSLContext.getInstance("TLSv1.2");
KeyStore ks = KeyStore.getInstance("JKS");
InputStream ksIs = new FileInputStream("securecert.certificate");
try {
ks.load(ksIs, "pwdpwdpwd".toCharArray());
} finally {
if (ksIs != null) …Run Code Online (Sandbox Code Playgroud)