Play 2.1 SSL配置

7

我是Play的新手,在配置生产环境的SSL过程中遇到了问题。我可以使用自签名证书成功地在开发模式下运行,但是当我尝试使用签名证书时,初始客户端握手失败,并且Play生成以下堆栈跟踪:

play - Error loading HTTPS keystore from conf/keystore.jks
java.security.NoSuchAlgorithmException: RSA KeyManagerFactory not available
at sun.security.jca.GetInstance.getInstance(GetInstance.java:159) ~[na:1.7.0_11]
at javax.net.ssl.KeyManagerFactory.getInstance(KeyManagerFactory.java:139) ~[na:1.7.0_11]
at play.core.server.NettyServer$PlayPipelineFactory$$anonfun$sslContext$1.apply(NettyServer.scala:74) [play_2.10.jar:2.1.1]
at play.core.server.NettyServer$PlayPipelineFactory$$anonfun$sslContext$1.apply(NettyServer.scala:62) [play_2.10.jar:2.1.1]
at scala.Option.map(Option.scala:145) [scala-library.jar:na]
at play.core.server.NettyServer$PlayPipelineFactory.sslContext$lzycompute(NettyServer.scala:62) [play_2.10.jar:2.1.1]

我正在运行Play 2.1.1和Java 1.7.0_11。我已按以下方式配置SSL支持:
//生成证书签名请求 keytool -certreq -alias server -keyalg RSA -file server.csr -keystore keystore.jks //加载根证书和中间证书
keytool -import -alias godaddy -keystore keystore.jks -file gd_bundle.crt

//加载签名证书

keytool -import -alias server -keystore keystore.jks -file server.crt

//启动play并使用系统参数运行ssl

sudo ../../jars/play-2.1.1/play -Dhttps.port=443 -Dhttps.keyStore="conf/keystore.jks" -Dhttps.keyStorePassword=REDACTED -Dhttps.keyStoreAlgorithm="RSA" run

有人知道如何解决java.security.NoSuchAlgorithmException: RSA KeyManagerFactory not available错误吗?

2个回答

8

请从您的命令中删除-Dhttps.keyStoreAlgorithm=RSA。@gma是正确的,这是密钥库的算法,而不是密钥。

我使用以下命令启动我的play应用程序,并使用我生成的密钥:

keytool -genkey -alias MyKey -keyalg RSA -keysize 2048 -keystore keystore.jks
play -Dhttps.port=9443 -Dhttps.keyStore=keystore.jks -Dhttps.keyStorePassword=password run

然后我打开了我的浏览器,并输入了 https://localhost:9443


谢谢,我也成功了。请看我的回复@gma的评论。 - merritts

1
由于RSA不是您的keyStoreAlgorithm,而是您的Key算法。 将-Dhttps.keyStoreAlgorithm="RSA更改为-Dhttps.keyStoreAlgorithm="jks",因为jks是Java密钥库的默认格式。

2
当我将jks用作密钥库算法时,我收到了相同的错误。然后,我重新生成了我的证书,并使用https.keyStoreAlgorithm="jks"启动Play,但是没有成功。然而,通过排除https.keyStoreAlgorithm参数,我成功地启动了Play。 - merritts
我也尝试了 -Dhttps.keyStoreAlgorithm="jks",但是得到了和 @merritts 相同的错误。 - Jason

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接