Rest API SSL由ca签署的证书

时间:2018-01-28 12:59:40

标签: java rest ssl grizzly

我遇到了Secure Grizzly HttpServer的问题,我的方法加载了密钥库文件和信任库文件,她为自签名的证书工作。

private static SSLContextConfigurator getSSLContextConfigurator() {
    final SSLContextConfigurator sslContextConfigurator = new SSLContextConfigurator();
    sslContextConfigurator.setKeyStoreFile("keystore_server");
    sslContextConfigurator.setKeyStorePass("password");
    sslContextConfigurator.setTrustStoreFile("truststore_server");
    sslContextConfigurator.setTrustStorePass("password");
    return sslContextConfigurator;
}

但是当我想将CA签名的证书导入密钥库或信任库时,例如:

keytool -genkey -keyalg RSA -keystore ./keystore_client -alias clientKey
keytool -export -alias clientKey -rfc -keystore ./keystore_client > ./client.cert
keytool -import -alias clientCert -file ./client.cert -keystore ./truststore_server

keytool -import certsigned.pem -keystore ./keystore_server -alias serverKey
keytool -export -alias serverKey -rfc -keystore ./keystore_server > ./server.cert
keytool -import -alias serverCert -file ./server.cert -keystore ./truststore_client

我的应用程序启动没有错误,但是当我使用curl / browser时出现客户端错误:

curl: (35) Unknown SSL protocol error in connection to domain.com:8090
Browser: ERR_CONNECTION_CLOSED

如何正确导入使用keytool签名的证书?

修改

我的证书已在网站上使用,因此他无效。

2 个答案:

答案 0 :(得分:1)

Curl不使用系统CA存储。您需要告诉curl您的CA证书在哪里使用

--cacert [file]

命令行选项或使用提及here的其他选项之一。

答案 1 :(得分:0)

我解决了我的问题!实际上,将证书链+私钥转换为PKCS#12文件格式,并将PKCS#12文件转换为Java密钥库格式。 并且密钥库文件工作! 更多信息here

openssl pkcs12 -export -out keystore.pkcs12 -in fullchain.pem -inkey privkey.pem
keytool -importkeystore -srckeystore keystore.pkcs12 -srcstoretype PKCS12 -destkeystore keystore_server
rm keystore.pkcs12