ドキュメントに署名し、ドキュメント、署名、および証明書をサーバー側に送信するアプレットがあります。サーバー側のポートレットはこれらの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ブロックで例外が発生します