二进制 X509 证书通过 AJAX 在 Tomcat 服务器 java.security.cert 错误的 Java 服务器页面中解析

问题描述 投票:0回答:0

我有一个 X509 证书存储在 Edirectory 中用户类的属性中,我想解析它的值以获得到期日期。正如我通过 LDAP 看到的那样,证书以二进制格式存储。

我有一个 JAVA 函数可以完美地完成这项工作,但问题是我想在浏览器上运行的工作流表单上运行它,所以我不能直接使用 JAVA,我必须向 tomcat 服务器发送一个 ajax 查询.

我点击该链接以便通过 AJAX 将表单传送到 JBOSS 服务器(在我的服务器中它是一个 Tomcat,但我猜它是一样的)并且该连接工作正常但我无法解析服务器上的证书:https //community.microfocus.com/cyberres/netiq-identity-governance-administration/idm/w/identity_mgr_tips/22902/howto-use-ajax-with-jquery-in-user-application-forms

这就是我从目录和我执行的 ajax 调用中获取值的方式:

var cert = IDVault.get(null, {userDN}, "User", "userCertificate");//It is how is it in Microfocus environment
alert(cert.length);//1
alert(cert[0].length);//2111
$.ajax( {
    type:                    'POST',
    url:                        {JSP_URL},
    dataType: "text",
    contentType: "application/octet-stream",
    processData: false,
    data:                    cert,
    success: function( data )
    {
        ajax_display( field, url, data );
    },
    error:    function( xhr, status )
    {
        ajax_display( field, url, xhr.status + " / " + status );
    },
    timeout: 9000
} )

JSP文件中的代码:

InputStream inputStreamAjax = request.getInputStream();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length;
while ((length = inputStreamAjax.read(buffer)) != -1) {
    byteArrayOutputStream.write(buffer, 0, length);
}

byte[] certificateBytes = byteArrayOutputStream.toByteArray();
System.out.println(certificateBytes.length);//2893
ByteArrayInputStream inputStream = new ByteArrayInputStream(certificateBytes);
CertificateFactory certFactory = CertificateFactory.getInstance("X.509");

try {
    X509Certificate cert = (X509Certificate) certFactory.generateCertificate(inputStream);
} catch (Exception e) {
    e.printStackTrace();
}

//Send Certificate back to form....

这个错误出现在 try catch 上,所以它被打印在 catalina.out 上:

java.security.cert.CertificateException: Could not parse certificate: java.io.IOException: Invalid BER/DER data (too huge?)

我做错了什么?

已编辑:如果我在调用 ajax 之前检查 var cert 中的字节长度,它是 2111,但是如果我在解析之前检查 jsp 文件,在 certificateBytes 变量中它是 2983。差异求和在哪里? (代码是用这些检查的位置编辑的)

java ajax certificate edirectory
© www.soinside.com 2019 - 2024. All rights reserved.