訪問令牌終點時,我們運行一個JVM後端的Web應用程序(Java 7的更新75;代碼是Scala,但我不認爲這是相關的)。我們使用Google通過Oauth進行身份驗證。谷歌身份驗證錯誤從JVM
在過去的幾個月裏,我們一直有一些時間間歇性地無法驗證用戶身份。
來自Google的重定向成功,但是當我們嘗試撥打token_endpoint
來驗證身份驗證時,我們有時會得到以下例外:javax.net.ssl.SSLHandshakeException: server certificate change is restrictedduring renegotiation
。
對另一個問題的評論讓我發現了一個JDK bug,它可以表現爲這個異常(What means "javax.net.ssl.SSLHandshakeException: server certificate change is restrictedduring renegotiation" and how to prevent it?)。
我的工作假設是:
的錯誤(https://bugs.openjdk.java.net/browse/JDK-8072385)表示,只有在主題備用名稱(SAN)列表中的第一項檢查。當被驗證的主機名在SAN列表中,但不在列表頂部時,會引發上述異常。
昨天(2015年5月27日從),我們看到了兩個不同的證書被間歇性地從www.googleapis.com服務。第一個(系列67:1a:d6:10:cd:1a:06:cc
)的SAN列表爲DNS:*.googleapis.com, DNS:*.clients6.google.com, DNS:*.cloudendpointsapis.com, DNS:cloudendpointsapis.com, DNS:googleapis.com
,而第二個(系列61:db:c8:52:b4:77:cf:78
)的SAN列表爲:DNS:*.storage.googleapis.com, DNS:*.commondatastorage.googleapis.com, DNS:*.googleapis.com
。
由於JVM中存在缺陷,我們可以驗證第一個證書,但第二個(儘管完全有效)拋出異常,因爲*.googleapis.com
不是SAN列表中的第一個條目。
解決方法是在尚未公佈7u85(沒有提及的時候,這將是可用)。
我已將羣集的單個節點降級到7u65,但證書似乎在我們這樣做的時候恢復(我們看到的最後一個錯誤是22:20GMT),因此很難確定是否有肯定的修復。
是否有其他人遇到過此類或類似的問題,並且除降級外還有其他解決方法(降級會刪除各種其他SSL/TLS檢查)?