我正在尝试在Apache Ace和管理代理之间启用双向SSL身份验证(通过遵循文档 http://ace.apache.org/dev-doc/design/using-client-certificates.html)。为此,首先,我按照以下步骤创建了所需的证书:
步骤#1)通过执行以下命令,使用 OpenSSL 创建了自签名证书颁发机构:
openssl req -x509 -new -config Certi/X509CA/openssl.cnf -days 365 -out Certi/X509CA/ca/new_ca.pem -keyout Certi/X509CA/ca/new_ca_pk.pem
此命令创建了证书 new_ca.pem 及其私钥 new_ca_pk.pem。
步骤#2)使用以下命令将证书 new_ca.pem 导入到名为信任库的密钥库文件
keytool -import -alias truststore -keystore truststore -file new_ca.pem
步骤#3)为管理代理程序创建了证书,该证书在名为 keystore-ma.jks 的 Java 密钥库文件中可用。
keytool -genkey -dname "CN=<hostIP>, OU=IT, O=<Organization Name>, ST=UP, C=IN" -validity 365 -alias keystore-ma -keypass secret -keystore keystore-ma.jks -storepass secret
步骤#4)创建了一个企业社会责任:
keytool -certreq -alias keystore-ma -file keystore-ma_csr.pem -keypass secret -keystore keystore-ma.jks -storepass secret
步骤#5)已使用在步骤 1 中创建的证书颁发机构对证书进行签名。
openssl ca -config X509CA/openssl.cnf -days 365 -cert C:/X509CA/ca/new_ca.pem -keyfile C:/X509CA/ca/new_ca_pk.pem -in C:/X509CA/ca/keystore-ma_csr.pem -out C:/X509CA/ca/keystore-ma.pem
步骤#6)已将证书导入到名为密钥库-ma 的 kestore 文件中
keytool -import -alias keystore-ma -keystore keystore-ma -file keystore-ma.pem
遵循类似的步骤(3-6)来创建和签署cetificate或ACE服务器,在Java密钥库文件(称为keystore-server)中可用。
然后我更新了 Ace Server 的 Platform.properties 以包含其他属性并启动了 Ace Server:
-Dorg.osgi.service.http.port.secure=8443
-Dorg.apache.felix.https.enable=true
-Dorg.apache.felix.https.truststore=/path/to/truststore
-Dorg.apache.felix.https.truststore.password=secret
-Dorg.apache.felix.https.keystore=/path/to/keystore-server
-Dorg.apache.felix.https.keystore.password=secret
-Dorg.apache.felix.https.clientcertificate=needs
使用以下命令启动 ace-launcher.jar:
java -Djavax.net.ssl.trustStore=/path/to/truststore -Djavax.net.ssl.trustStorePassword=secret -Djavax.net.ssl.keyStore=/path/to/keystore-ma -Djavax.net.ssl.keyStorePassword=secret -jar org.apache.ace.launcher-0.8.1-SNAPSHOT.jar discovery=https://<Ace Server Ip>:8443 identification=MyTarget
我通过将发现 URL 更改为
1) https://<Ace Server Ip>:8080
2) http://<Ace Server Ip>:8080
3) https://<Ace Server Ip>:8443
但目标未在 Ace 服务器中注册。我是否使用正确的 URL 通过 HTTPS 连接到 Ace 服务器? 另外,如何确认我的 Ace 服务器是否配置为接受来自管理代理的 HTTPS 流量?
我看到您使用的可分辨名称 (DN) 不仅仅是一个通用名称。
按照约定,主机名作为公用名用于证书验证。如果您创建具有CN=hostname-of-target
的证书(IP 地址不足),它应该可以工作。
我可以为您提供的另一个提示来排除SSL错误:对服务器使用-Djavax.net.debug=ssl
,它会吐出大量信息,但会提供有关正在发生的事情以及导致错误的原因的详细信息。