我已经通过 API 生成了一个 PKCS12 密钥库,但是该过程的返回是一个 KeyStore 对象。我需要发送,在客户端发送申请时直接到浏览器下载。
我怎样才能做到这一点?
我正在使用 java 和 jboss 5AS。
您可以使用KeyStore#store()
将其写出到OutputStream
.
keyStore.store(outputStream, password);
基本上就是这样。OutputStream
可能是 HTTP 响应之一。有关如何在 JSF 中提供文件下载的通用启动示例,其中您需要集成此行,请参阅此答案:如何从 JSF 支持 bean 提供文件下载?使用内容类型.application/x-pkcs12
这是代码:
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();
}