6
A
回答
9
這裏是一個腳本來獲取(更新)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
您可以安排一個cron作業定期爲letsencrypt目前證書後90天過期運行此腳本。
一旦你獲得證書,你需要進行如下修改應用程序啓動腳本:
/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
快到了。當您運行應用程序時,您可以從SSL Labs獲得A-的評分。評級降級與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.confplay.server.https.engineProvider = controllers.CustomSslEngineProvider
。
使用Play測試2.5.x
相關問題
- 1. 如何在swisscom應用程序雲上創建Let's Encrypt證書?
- 2. 如何使用Jetty和Let's Encrypt證書?
- 3. 安裝Lets Encrypt SSL證書後,可以安全地刪除Expedited SSL嗎?
- 4. 如何配置的build.gradle使用谷歌Play應用簽名上傳證書
- 5. 如何在Play應用程序中使用JPA配置HikariCP
- 6. 我可以更改Play商店的Android應用程序證書
- 7. 我可以使用我自己託管的WCF應用程序使用Let's Encrypt證書嗎?
- 8. 你如何在Alexa服務中使用Let's Encrypt證書?
- 9. 如何使用Google應用程序配置Jenkins身份驗證
- 10. Azure應用程序證書
- 11. 如何配置Spring引導應用程序以通過MySQL使用SSL/TLS?
- 12. 使用IDEA和SBT配置Play 2.0應用程序
- 13. 證書,配置文件等我的新iOS應用程序
- 14. 配置SSL證書在Apache Django的應用程序(mod_wsgi的)
- 15. 如何配置彈性beanstalk以使用https與ACM證書?
- 16. 如何配置WCF以使用HTTP和客戶端證書?
- 17. 如何配置WEBrick以通過HTTPS使用中間證書?
- 18. 如何使用sbt在Play應用程序中指定配置文件?
- 19. 如何配置Rails應用程序以僅使用Redis?
- 20. 如何使用終端分配證書並構建iOS應用程序?
- 21. 如何設置本地SSL證書和Rails應用程序?
- 22. 如何在C#Win應用程序中設置證書
- 23. 如何使用主機應用程序輕鬆部署證書?
- 24. 如何在iOS應用程序中使用自簽名證書
- 25. 證書,應用ID和配置文件
- 26. 如何配置我的應用程序php sdk(臉書)
- 27. Google應用上的Google Play證書
- 28. 如何將DigiCert EV證書應用於ClickOnce應用程序
- 29. 如何使Lighttpd的Let's Encrypt證書更新自動化?
- 30. 如何將WinCE配置爲使用通配符SSL證書?
「mv/etc/letsencrypt」不是個好主意。它可能破壞其他證書和檔案。如果您確實想要使用乾淨的目錄,則可以使用--config-dir選項:http://letsencrypt.readthedocs.io/en/latest/using.html – Tom
當然。我只有一份證書,所以我不在乎。這個答案相當於配置Play而不是管理證書。隨意根據需要修改示例腳本。 – Jan