我想使用HSM(硬件安全模块)来创建XML文件的签名.我做了一些研究,但现在有点困惑.
你能否澄清一下这些问题:
我使用apache.commons.net -framework 在java中实现了FTPS客户端(FTP over SSL/TLS).它被配置为在默认端口21上执行显式安全性.
ftpsClient = new FTPSClient(false);
ftpsClient.setTrustManager(getConfiguration().getCertificatesManager());
ftpsClient.connect(getConfiguration().getHostName(), getConfiguration().getPort());
Run Code Online (Sandbox Code Playgroud)
只要我不在服务器上强制执行客户端身份验证,一切正常.但我需要启用客户端身份验证,因此我在服务器上强制执行它并配置客户端系统属性:
-Djavax.net.ssl.keyStore="D:/.../ftps-client-auth.keystore"
-Djavax.net.ssl.keyStorePassword="*****"
-Djavax.net.ssl.keyStoreType=JKS
Run Code Online (Sandbox Code Playgroud)
我得到的就像我没有设置系统属性一样:
javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:136)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1806)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:986)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1170)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1197)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1181)
at org.apache.commons.net.ftp.FTPSClient.sslNegotiation(FTPSClient.java:265)
at org.apache.commons.net.ftp.FTPSClient._connectAction_(FTPSClient.java:207)
at org.apache.commons.net.SocketClient.connect(SocketClient.java:172)
at org.apache.commons.net.SocketClient.connect(SocketClient.java:192)
Run Code Online (Sandbox Code Playgroud)
服务器日志说:
DEBUG: Client "<my ip address>", "SSL_accept failed: error:140890C7:SSL routines:SSL3_GET_CLIENT_CERTIFICATE:peer did not return a certificate"
Run Code Online (Sandbox Code Playgroud)
似乎没错 - 我启用了-Djavax.net.debug = all,这表明服务器发送了它接受的CN列表,但是客户端发送了一个空的证书链.
我可以配置XAdES4J来委派签名创建使用PKCS#11基础架构给硬件安全模块(HSM)?如果是 - 如何?
这些网站上的信息让我假设,只有使用PKCS#11的密钥转移是可能的:
我希望框架能够捕获每个未捕获的异常并显示适当的通知消息.
因此,我ErrorHandler在我的UI中设置了一个自定义(受到"Vaadin之书"的启发:https://vaadin.com/book/-/page/application.errors.html ):
public abstract class MyUI extends UI {
@Override
protected void init(final VaadinRequest request) {
setErrorHandler(new DefaultErrorHandler() {
@Override
public void error(final com.vaadin.server.ErrorEvent event) {
Throwable error = event.getThrowable();
Notification.show(error.getLocalizedMessage(), Notification.Type.ERROR_MESSAGE);
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我从后端加载错误时它没有被执行.相反,表单显示不完整,当我重新加载页面(F5)时,我得到一个异常视图,就像我从Tomcat的常规异常处理程序中知道的那样.
我设置它是不对的ErrorHandler?有没有更好的办法?
我正在使用Glassfish 4和Vaadin 7.