播放2.1 SSL配置

我是Play的新手,也是为生产配置SSL的过程。 我可以使用自签名证书成功在dev模式下运行,但是当我尝试使用签名证书时,初始客户端握手失败,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支持如下:

//生成一个csr

keytool -certreq -alias server -keyalg RSA -file server.csr -keystore keystore.jks

//加载root和中间证书

 keytool -import -alias godaddy -keystore keystore.jks -file gd_bundle.crt 

//加载签名证书

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

//使用系统参数启动播放以运行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如何不可用错误?

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

我使用以下命令用我生成的密钥启动我的播放应用程序:

 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

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