Rest API SSL 证书由 ca 签名

Rest API SSL With certs signed by ca

我的 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 签名的证书?

编辑

我的证书已经在网站上运行了,所以他没有失效。

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

--cacert [file]

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

我的问题解决了!其实就是把证书链+私钥转成PKCS#12文件格式,把PKCS#12文件转成Javakeystore格式。 和密钥库文件工作! 更多信息 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