Apache ActiveMQ Artemis 2.18沒有重新加載帶有證書的更新密鑰庫。之前我們使用2.17版本,它作業得很好。但是在升級到2.18之后,Artemis實體繼續使用啟動時提供的證書來服務請求。 密鑰庫檔案每小時變化一次。
原因是:java.security.cert.CertificateExpiredException。NotAfter: Tue Sep 07 04:10:33 UTC 2021
在java.base/sun.security.x509.CertificateValidity.valid(CertificateValidity.java:277)
在java.base/sun.security.x509.X509CertImpl.checkValidity(X509CertImpl.java:683)
at java.base/sun.security.provider.certpath.BasicChecker.verifyValidity(BasicChecker.java:190)
服務器端的例外是:
2021-09-06 09:30:41,315 WARN [org.apache.activemq.artemis.core.server] AMQ222208: 來自/x.x.x.x:x的客戶的SSL握手失敗:javax.net.ssl.SSLHandshakeException。收到了致命的警告:certificate_unknown。
在Artemis服務器重新啟動后,新的證書被拾起,Artemis實體為請求提供一小時的服務,直到證書過期。
我想知道是否需要進行額外的配置。或者是否有辦法在不重啟Artemis服務器的情況下重新加載密鑰庫。
uj5u.com熱心網友回復:
這種行為是由于ARTEMIS-3117而改變的。以前,javax.net.ssl.SSLContext的一個實體是為每個連接創建的。這將隱含地接收對任何新連接的 keystore 和 truststore 的任何更改。然而,這是相當低效的,因此在大量的連接中不能很好地擴展。這種行為被改變了,所以只有一個javax.net.ssl.SSLContext被創建給每個接受者。然而,你仍然可以更新你的keystore和amp; truststore在磁盤上,并更新代理,而無需重新啟動。只需在接受器上使用reload管理操作。這可以通過JMX、Web控制臺、Jolokia等方式實作。
這里有一個curl命令的例子,你可以使用Jolokia:
curl --user admin:admin --header "Content-Type: application/json" --request POST --data '{"type": "exec", "mbean": "org.apache.activemq.artemis:broker="0.0.0.0", component=acceptors, name="artemis"", "operation": "reload"}' http://localhost:8161/console/jolokia/exec
當然,你要為你的環境調整用戶名& password以及broker和acceptor名稱。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/317200.html
標籤:
