当前位置: 首页 > 面试题库 >

SSL Java java.io.IOException:无效的密钥库格式

慕佑运
2023-03-14
问题内容

我正在使用SSLServerSocket和java.ssl包中的其他类在Java中测试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[] {}, null);
            ServerSocketFactory ssocketFactory = sc.getServerSocketFactory();
            SSLServerSocket ssocket = (SSLServerSocket) ssocketFactory
                    .createServerSocket(port);
            ssocket.setEnabledProtocols(new String[] { "SSLv3" });
            Socket socket = ssocket.accept();
            BufferedReader in = new BufferedReader(new InputStreamReader(
                    socket.getInputStream()));
            PrintWriter out = new PrintWriter(socket.getOutputStream());
            out.println("Hello, Securly!");
            out.close();
            in.close();
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

文件key.txt:1268312345812304612348712634283427346我想我应该在key.txt文件中放一些东西,但是我不知道要放什么。可能是经过消毒的物体。

编辑:客户端代码:

package testing;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.security.KeyStore;

import javax.net.SocketFactory;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.TrustManager;

public class SSLClientTest {
    public static void main(String[] args) {

        int port = 3000;
        String host = "localhost";

        try {
            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[] {}, null);
            SocketFactory factory = sc.getSocketFactory();
            SSLSocket socket = (SSLSocket) factory.createSocket(host, port);
            socket.startHandshake();
            BufferedReader in = new BufferedReader(new InputStreamReader(
                    socket.getInputStream()));
            String str = "";
            while ((str = in.readLine()) != null)
                System.out.println(str);
            in.close();
            socket.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

问题答案:

您的档案无效。您必须导入一个JKS密钥库文件,而不是txt文件。您必须使用keytool创建密钥库文件,然后导入该文件。



 类似资料:
  • 执行密钥库时,以下代码每次都会失败,IOException为“无效密钥库格式”。load()方法。该文件已成功从.jar文件加载。在Windows 10 Pro上使用Java 1.8。Maven用于编译和组装jar文件,然后将war放在一起,并作为war文件部署到JBOSS服务器。我也尝试过使用getDefault()的.getInstance,但出现了相同的错误。 使用以下命令从自签名服务器证书

  • 11:12:17,289信息[org.apache.Coyote.http11.http11protocol](MSC服务线程1-2)JBWeb003001:Coyote http/1.1正在初始化:http-/0.0.0.0:8080 11:12:17,297信息[org.apache.Coyote.http11.http11protocol](MSC服务线程1-2)JBWeb003000:Co

  • 任务“:app:packageRelease”的执行失败。 执行com时发生故障。Android建筑格雷德尔。内部的任务。工人$ActionFacade.com。Android石斑鱼类。常见的签字。KeytoolException:无法从存储区“/Users/husseinawaesha/key.jks”读取密钥:密钥库格式无效

  • 在终端中运行命令时出错: "keytools-list-v-alias androiddegkey-keystore%USERPROFILE%. android\debug.keystore" 导致以下错误: P.S:关于这个错误,我看到过类似的问题,但没有一个解决方案解决了我的问题。

  • 我使用的是ruby EC2 SDK,版本2。用EC2生成的密钥的私钥材料存储在字符串中。我正在尝试使用生成将密钥导入EC2所需的公钥材料 我尝试了一些新的东西。我使用EC2 web控制台从头开始生成了一个新密钥,然后按照Raphael在下面指出的方法生成了一个公共密钥 密钥未加密。 在尝试通过web控制台或代码导入公钥时,我得到了同样的错误。 而第一个生成的文件以 现在的问题是如何在Ruby中生成

  • 我有一个dockerfile: 但当我尝试用最新的docker版本构建它时,我得到了以下错误: 谁能告诉我,我应该如何修复这个dockerfile?谢谢!!