Java - 通过套接字发送证书

标签 java sockets certificate bouncycastle

我需要使用套接字将 v3 证书从服务器发送到客户端。 去做这个: 服务器端,我生成一个用 base64.encode 编码的证书,然后将其发送到客户端。 客户端,我收到包含证书的字符串,

服务器代码:

 X509Certificate certificate = ...;
 sendAnswer(new String(certificate.getEncoded()));

public static void sendAnswer(String ans) {
    try {
        s.shutdownInput();
        PrintWriter output = new PrintWriter(s.getOutputStream(), true);
        output.println(new String(Base64.encode(ans.getBytes())));
        output.close();

    } catch (IOException ex) {
        Logger.getLogger(serverThread.class.getName()).log(Level.SEVERE, null, ex);
    }
}

客户端代码

 String value = sendMessage(..);//method which receive the certificate from the server

 InputStream inStream = null;
 X509Certificate cert=null;
 inStream = new ByteArrayInputStream(value.getBytes());
 CertificateFactory cf = CertificateFactory.getInstance("X.509","BC");
 cert = (X509Certificate)cf.generateCertificate(inStream);

public static String sendMessage(String url, int port, String tag, byte[] mex1) {

    Socket link;
    String reply = "";

    byte[] replyDec = null;

        link = new Socket(InetAddress.getByName(url), port);
        InputStream i = null;
        try {
            i = link.getInputStream();
        } catch (IOException ex) {
            Logger.getLogger(ClientApp.class.getName()).log(Level.SEVERE, null, ex);
        }
        Scanner input = new Scanner(i);

        while (input.hasNextLine()) {
            reply += input.nextLine();
        }
        replyDec = Base64.decode(reply);
        input.close();
        link.close();


    return new String(replyDec);
}

几乎一切正常,在客户端,如果我打印收到的字符串,我会得到一个包含额外字符和证书数据的文本。但在客户端创建证书时它给了我一个错误。 这是错误:

java.security.cert.CertificateException:java.io.IOException:DER 长度超过 4 个字节:111 在 org.bouncycaSTLe.jce.provider.JDKX509CertificateFactory.engineGenerateCertificate(来源未知) 在java.security.cert.CertificateFactory.generateCertificate(CertificateFactory.java:322)

这就是它的来源

cert = (X509Certificate) cf.generateCertificate(inStream);

有人可以帮助我吗?

提前致谢

最佳答案

把它全部扔掉并使用 SSL,它已经做到了这一切。

关于Java - 通过套接字发送证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3392216/

相关文章:

java - 基于 vector 和点的四元数旋转

java - JavaScript 和 Java 默认支持 REST 还是我需要安装新软件?

java - 在文本文件中搜索子字符串 - java

c++ - 修改connect()超时时间

java - 多线程服务器客户端地址已被使用

c# - 使用 c# 从 Panasonic PBX 捕获数据

java - 从包含另一个列表的列表中获取元素

ssl - MaxCDN - 共享 ssl - 证书无效?

java - 在 Java Applet 中生成/下载文档

java - 使用heroku war时如何在Heroku中编辑Procfile :deploy myapp. war