1

我已经通过 API 生成了一个 PKCS12 密钥库,但是该过程的返回是一个 KeyStore 对象。我需要发送,在客户端发送申请时直接到浏览器下载。

我怎样才能做到这一点?

我正在使用 java 和 jboss 5AS。

4

2 回答 2

2

您可以使用KeyStore#store()将其写出到OutputStream.

keyStore.store(outputStream, password);

基本上就是这样。OutputStream可能是 HTTP 响应之一。有关如何在 JSF 中提供文件下载的通用启动示例,其中您需要集成此行,请参阅此答案:如何从 JSF 支持 bean 提供文件下载?使用内容类型.application/x-pkcs12

于 2013-03-27T02:07:12.777 回答
1

这是代码:

public void cadastrar () throws Exception
{       
    byte[] encodedKeyStore = controlador.cadastrar(certificadoModel);

    java.security.KeyStore keyStore = java.security.KeyStore.getInstance("PKCS12");
    keyStore.load(new ByteArrayInputStream(encodedKeyStore), certificadoModel.getPassword().toCharArray());

    FacesContext fc = FacesContext.getCurrentInstance();
    ExternalContext ec = fc.getExternalContext();

    ec.responseReset(); 
    ec.setResponseContentType("application/x-pkcs12"); 
    //ec.setResponseContentLength(contentLength); 
    ec.setResponseHeader("Content-Disposition", "attachment; filename=\"" + certificadoModel.getUsername() + ".p12" + "\""); 

    OutputStream output = ec.getResponseOutputStream();
    keyStore.store(output, certificadoModel.getPassword().toCharArray());

    fc.responseComplete(); 
}
于 2013-03-27T13:51:34.067 回答