我希望在另一台服务器上运行的Java应用程序能够向apache服务器发送HTTPS请求,但由于 SSLHandShakeException
,请求失败 .
我已经做了正确的事情,但我从apache服务器获取了 ssl-cert-snakeoil.pem
文件,并将其导入java应用程序服务器上的java cacerts
keystore . 这修复了最初的 PKIX Path Building Failed...
错误,但它现在被另一个SSLHandShakeException替换为 No name matching [mydomain.com] found
. 我有点迷茫 .
我运行以将证书导入应用程序的密钥库的初始命令是:
sudo keytool -import -file apache-cert.pem -alias mydomain.com -keystore /path/to/cacerts
1 回答
它无法工作的原因是因为Apache生成的snakeoil证书使用了服务器的主机名(显然!)作为证书的通用名称(CN)(它是一个Amazon EC2服务器,所以它有一个像ip-xxx这样的主机名-xxx-XXX-xxx.region) . 因此,这与我的Java应用程序服务器所期望的(mydomain.com)不匹配 .
我为Apache服务器生成了一个新的证书/密钥对,例如
...在选项中指定mydomain.com作为CN . 然后我编辑了
sites-available
config以指向新的证书/密钥,然后是sudo service apache2 restart
.之后我将apache.crt文件复制到java服务器并运行