Когда я пытаюсь преобразовать строку с сертификатом, возникает исключение

У меня есть апплет, который подписывает документ и отправляет документ, подпись и сертификат на сторону сервера. На стороне сервера портлет получает эти 3 файла, все файлы хранятся в формате base64, но когда я пытаюсь получить сертификат, возникает исключение

java.security.cert.CertificateException: Could not parse certificate: java.io.IOException: Empty input
at sun.security.provider.X509Factory.engineGenerateCertificate(X509Factory.java:104)

код стороны апплета:

public static byte[] certificate;

public static String getCertificateString() {
        String str = "";
        byte[] result = null;
        result = Base64.encode(certificate);
        for (int i = 0; i < result.length; i++) {
            str += (char) (result[i]);
        }
        return str;
    }

    //initialization of certificate from the store
    Certificate cert = store.getCertificate(aliasKey);
    certificate = cert.toString().getBytes();

после этого я отправляю сертификат в портлет, где нужно проверить подпись. Но преобразование сертификата не удалось.

код портлета:

String certificate = request.getParameter("cert");
byte[] cert_array = Base64.decode(certificate.getBytes());
try {
    cert = CertificateFactory.getInstance("X509").generateCertificate(new ByteArrayInputStream(cert_array));
}catch(Exception e){
    e.printStackTrace();
}

И в этот момент в блоке try возникает исключение

 Thomas Mueller15 мая 2012 г., 07:11
Если вы запускаете код в автономной программе, он работает? Если да, то я думаю, что в некоторых случаях request.getParameter ("cert") фактически не возвращает правильные данные.
 Thomas Mueller15 мая 2012 г., 07:05
Ну, что именно он возвращает?
 test160415 мая 2012 г., 07:08
Сертификат в формате base64
 Thomas Mueller15 мая 2012 г., 06:57
Вы проверяли, что request.getParameter ("cert") возвращает правильные данные?
 test160415 мая 2012 г., 07:00
Да, я проверяю, и он возвращает

Ответы на вопрос(2)

Решение Вопроса

@ test1604 вы пытаетесь что-то вроде этого, реализует класс X509TrustManager, хорошо, мы идем:

import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

public class YouNameClass implements X509TrustManager {... 
   public YouNameClass() {
      super();
   }
}

И добавь этот метод,

private static void trustAllHttpsCertificates() throws Exception {
//  Create a trust manager that does not validate certificate chains:
    javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1];
    javax.net.ssl.TrustManager tm = new YouNameClass();
    trustAllCerts[0] = tm; 
    javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext.getInstance("SSL");
    sc.init(null, trustAllCerts, null);
    javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
}

и переопределение методов:

    @Override
     public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
       return;
}

    @Override
    public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
       return;
}

    @Override
    public X509Certificate[] getAcceptedIssuers() {
       return null;
}

Это оно. :)

 test160415 мая 2012 г., 07:27
Большое спасибо, но мне не нужно ssl-соединение, моя задача - проверить подписанный документ с помощью сертификата

аете это, вы также можете не использовать HTTPS и просто использовать HTTP

 MarsAtomic02 окт. 2015 г., 04:22
Это не дает ответа на вопрос. Чтобы критиковать или запросить разъяснения у автора, оставьте комментарий под его постом - вы всегда можете комментировать свои собственные посты, и как только у вас будет достаточно Репутации Вы будете в состоянии комментарий к любому посту.
 skanga01 окт. 2015 г., 21:31
Хороший способ думать о сертификатах открытых ключей сродни паспортной системе. Сертификаты используются для установления информации о владельце этой информации способом, который очень трудно подделать. Вот почему проверка сертификата так важна: принятие любого сертификата означает, что сертификат злоумышленника будет приниматься вслепую. Точно так же, как запуск контрольного пункта паспорта, где вы сознательно принимаете поддельные паспорта Скорее бессмысленно.
 skanga19 нояб. 2015 г., 00:27
Даже если он не дает ответа, важно знать, что «принятый ответ» является неправильным, и INDEED он ОПАСНЫЙ. Другие, кто слепо копирует этот код, должны это знать.
 MarsAtomic19 нояб. 2015 г., 04:53
Если у вас есть комментарий относительно чужого вопроса или ответа, вы отправляетекомментари. Если у вас есть фактический ответ, то отправьтеотве - это довольно простая концепция. Если у вас недостаточно представителей, чтобы комментировать, пометьте ветку вопросов как избранную, а затем участвуйте в SO с полезными ответами и вопросами, пока у вас не будет достаточно представителей. Затем вы можете найти ветку в избранном и комментировать.

Ваш ответ на вопрос