問題背景
近期在適配華為AGC的Cloud DB服務(wù),前期已經(jīng)嘗試了Android和iOS端的集成,近期在開始體驗(yàn)Server端的集成。
我們選擇的是華為提供的Server 端的Java SDK,同時我們還集成了認(rèn)證服務(wù),但是運(yùn)行的時候,一直報(bào)TLS_ECDHE_ECDSA_WITH_AES_256_6CM_SHA384的錯誤。
相應(yīng)的錯誤日志:
warning: FaiLed to initiaLize a channel. CLosing: [id: 0xfd08a711]
java.lang.ILlegalArgumentException Create breakpoint: Cannot Support TLS_ECDHE_ECDSA_WITH_AES_256_6CM_SHA384 With currentLy instaLLed providers
at sun.security.ssl.CipherSuiteList.<init>(CipherSuviteList. java:81)
at Sun.Security.SSL.SSLEngineImpL.SetEnabLedCipherSuites(SSLEngineImpL.java:29358)
at com.huawei.agconnect.server.netty.handler. NettyConnectorInitializer.initChannel(NettyConnectorInitializer. java:72)
at com.huawei.agconnect.server.netty.handLer.NettyConnectorInitiaLizer.initChanneL(NettyConnectorInitiaLizer.java:33)
at io.netty.channeL.ChanneLInitiaLizer.initChanneL(ChanneLInitiaLizer.java:129)
at io.netty.channeL.ChanneLInitiaLizer.handLerAdded(ChanneLInitiaLizer.java:112)
at io.netty.channeL.AbstractChanneLHandLerContext.caLLHandLerAdded(AbstractChanneLHandLerContext.java:9358)
at io.netty.channeL.DefauLtChanneLPipeLine.caLLHandLerAdded6(DefauLtChanneLPipeLine.java:699)
at io.netty.channeL.DefauLtChanneLPipeLine.access$166(DefaultChanneLPipeline.java:46)
at io.netty.channeL.DefauLtChanneLPipeLine$pPendingHandLerAddedTask.execute(DefauLtChanneLPipeLine.java:14635)
at io.netty.channeL.DefauLtChanneLPipeLine.caLLHandLerAddedForALLHandLers(DefauLtChanneLPipeLine.java:1115)
at io.netty.channeL.DefauLtCchanneLPipeLine.invokeHandLerAddedIfTNeeded(DefauLtChanneLPipeLine.java:659)
問題定位
1、首先懷疑是SDK沒有成功導(dǎo)入的問題。 但是在項(xiàng)目目錄的External Libraries的時候,看相關(guān)的包導(dǎo)入都是正常的:
2、然后懷疑是我Server環(huán)境的問題。我把代碼工程發(fā)給同事,發(fā)現(xiàn)同事可以正常執(zhí)行,說明就是我的環(huán)境問題。
3、再次查看日志,發(fā)現(xiàn)詳細(xì)日志的首行:
TLS_ECDHE_ECDSA_WITH_AES_256_6CM_SHA384
Google搜索后發(fā)現(xiàn)很多類似的報(bào)錯。比較分析后發(fā)現(xiàn)應(yīng)該是因?yàn)镾DK引用了Netty框架,并且使用了特定的加密套件,但是該套件需要JDK的支持,如果當(dāng)前的JDK環(huán)境不支持,就會有上述問題。
JDK環(huán)境支持加密套件,就需要本地環(huán)境中,有安裝相應(yīng)的JCE包。
問題解決方案
1、首先需要下載JDK對應(yīng)的JCE包: JDK1.8對應(yīng)的JCE包下載地址
http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
2、下載好以后,將JCE包解壓,得到兩個 local_policy.jar 和 US_export_policy.jar 兩個 JAR 包。
3、 復(fù)制 local_policy.jar 和 US_export_policy.jar 文件,并且將其添加到你本地JavaSDK路徑的目錄下。具體的路徑為: %JAVA_HOME%/jre/lib/security。
如果路徑下已經(jīng)同名的文件,則直接將其覆蓋即可,如下是我的路徑示例。
4、 重啟Server項(xiàng)目,或者重啟服務(wù)器,問題完美解決。
參考鏈接:
華為AppGallery Connect 云數(shù)據(jù)庫服務(wù)Server開發(fā)文檔:
https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-clouddb-get-started-serverjava
同類問題參考鏈接:
https://blog.csdn.net/TroyLemon/article/details/51025929