本文适用于需要通过 HTTPS 连接到远程 Web 服务而不想阅读整个手册的用户。如果需要设置 Web 服务或配置客户端身份认证,请阅读 Generating X.509 Certificates 。
通过 HTTPS 连接到远程服务器
如果远程服务器正在使用一个由已知证书颁发机构签发的证书,那么WS应该在不进行任何额外配置的情况下即可正常工作。这里就结束了!
如果Web服务未使用众所周知的证书颁发机构,则它正在使用私有CA或自签名证书。您可以通过使用curl轻松确定这一点:
1 | curl https://financialcryptography.com # uses cacert.org as a CA |
如果收到以下错误,则必须获得CA的证书并将其添加到信任存储。
1 | curl: (60) SSL certificate problem: Invalid certificate chain |
获取根CA证书
理想情况下,这应该在外部完成:Web服务的所有者应该以一种不可伪造的方式,最好是亲自向您提供根CA证书。
在没有通信的情况下(不建议这样做),您有时可以使用JDK 1.8中的keytool
直接从证书链获取根CA证书:
1 | keytool -printcert -sslserver playframework.com |
返回的 #2 部分即是根证书:
1 | Certificate #2 |
要获得可导出格式的证书链,请使用-rfc选项:
1 | keytool -printcert -sslserver playframework.com -rfc |
将返回一系列PEM格式的证书:
1 | -----BEGIN CERTIFICATE----- |
可以复制粘贴到文件中。链中最后一个证书将是根CA证书。
注意
并非所有网站都包含根CA证书。您应该使用keytool
或证书解码器对证书进行解码,以确保您拥有正确的证书。
将trust manager(信任管理器)指向PEM文件
将以下内容添加到application.conf
中,具体指定pem格式:
1 | ssl-config { |
这将告诉信任管理器忽略证书的默认的cacerts存储,并且只使用您的自定义CA证书。
之后,将配置WS,您可以测试您的连接是否可以使用:
1 | WS.url("https://example.com").get() |
您可以在 示例配置 页面上看到更多示例。