証明書を取得したら、そこからJKSキーストアを生成するにはどうすればよいですか?Playアプリケーションを使用して証明書を暗号化する方法
このキーストアを使用するようにPlayアプリケーションを設定するにはどうすればよいですか?
他に何かする必要がありますか?ここで
証明書を取得したら、そこからJKSキーストアを生成するにはどうすればよいですか?Playアプリケーションを使用して証明書を暗号化する方法
このキーストアを使用するようにPlayアプリケーションを設定するにはどうすればよいですか?
他に何かする必要がありますか?ここで
は取得するスクリプト(更新)letsencrypt証明書です:
#!/bin/bash
/path/to/your/app/stop # stop the play application; especially if it is running on port 80 otherwise the certificate generation will fail
rm -rf /etc/letsencrypt.bak
mv /etc/letsencrypt /etc/letsencrypt.bak
./letsencrypt-auto certonly --standalone -n -m [email protected] --agree-tos -d example.com -d www.example.com
cd /etc/letsencrypt/live/example.com
openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out cert_and_key.p12 -CAfile chain.pem -caname root -passout pass:your_password
keytool -importkeystore -srcstorepass your_password -destkeystore keyStore.jks -srckeystore cert_and_key.p12 -srcstoretype PKCS12 -storepass your_password
/path/to/your/app/start # start the application
あなたはletsencrypt証明書は現在、90日後に有効期限が切れるよう、定期的にこのスクリプトを実行するcronジョブをスケジュールすることができます。あなたが証明書を取得したら
次のようにアプリケーションの起動スクリプトを変更する必要があります。ほとんどが
/path/to/your/app/app_name_script -Dhttps.port=443 -Dplay.server.https.keyStore.path=/etc/letsencrypt/live/example.com/keyStore.jks -Dplay.server.https.keyStore.password=your_password -Djdk.tls.ephemeralDHKeySize=2048 -Djdk.tls.rejectClientInitiatedRenegotiation=true # ... more parameters if required
を。アプリケーションを実行すると、A-の評価がSSL Labsになります。格下げ格付けはForward Secrecyに関連しています。カスタムSSLEngineProviderを実装することによって、暗号スイートの順序を指定する必要があります(フルの評価をしてもらう)転送秘密の問題を整理するために:
package controllers
import java.nio.file._
import java.security.KeyStore
import javax.net.ssl._
import play.core.ApplicationProvider
import play.server.api._
class CustomSslEngineProvider(appProvider: ApplicationProvider) extends SSLEngineProvider {
val priorityCipherSuites = List(
"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
"TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA")
def readPassword(): Array[Char] = System.getProperty("play.server.https.keyStore.password").toCharArray
def readKeyInputStream(): java.io.InputStream = {
val keyPath = FileSystems.getDefault.getPath(System.getProperty("play.server.https.keyStore.path"))
Files.newInputStream(keyPath)
}
def readKeyManagers(): Array[KeyManager] = {
val password = readPassword()
val keyInputStream = readKeyInputStream()
try {
val keyStore = KeyStore.getInstance(KeyStore.getDefaultType)
keyStore.load(keyInputStream, password)
val kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm)
kmf.init(keyStore, password)
kmf.getKeyManagers
} finally {
keyInputStream.close()
}
}
def createSSLContext(): SSLContext = {
val keyManagers = readKeyManagers()
val sslContext = SSLContext.getInstance("TLS")
sslContext.init(keyManagers, Array.empty, null)
sslContext
}
override def createSSLEngine(): SSLEngine = {
val ctx = createSSLContext()
val sslEngine = ctx.createSSLEngine
val cipherSuites = sslEngine.getEnabledCipherSuites.toList
val orderedCipherSuites =
priorityCipherSuites.filter(cipherSuites.contains) ::: cipherSuites.filterNot(priorityCipherSuites.contains)
sslEngine.setEnabledCipherSuites(orderedCipherSuites.toArray)
val params = sslEngine.getSSLParameters
params.setUseCipherSuitesOrder(true)
sslEngine.setSSLParameters(params)
sslEngine
}
}
を設定することを忘れないでください
あなたの application.confでplay.server.https.engineProvider = controllers.CustomSslEngineProvider
。
テスト済み2.5.x
「mv/etc/letsencrypt」はお勧めできません。他の証明書やアーカイブを破壊する可能性があります。クリーンディレクトリを使用する場合は、--config-dirオプションを使用できます。http://letsencrypt.readthedocs.io/en/latest/using.html – Tom
証明書が1つしかないので気にしない。この回答は、Playの設定ではなく、証明書の管理に関するものではありません。必要に応じてサンプルスクリプトを自由に変更してください。 – Jan