私はWSO2APIManagerをほぼ1年間使用して、APIを内部および外部の両方のコンシューマーに簡単かつ安全に公開しています。メンテナンス作業のためにシステムが停止するまで、すべてが正常に機能していました。システムが通常のサービスに戻ったとき、wso2carbon.log
のいくつかの例外を除いて、WSO2を起動できませんでした。 ファイル–「原因:com.mysql.cj.exceptions.UnableToConnectException:公開鍵の取得は許可されていません」 この記事では、修正を共有します。
エラー公開鍵の取得は許可されていません–MySQL8を使用したWSO2*
上記のエラーとは別に、wso2carbon.log
にさらにいくつかの例外があります。 ファイル、これがそのコピーです。
ERROR {org.wso2.carbon.user.core.internal.Activator} - Cannot start User Manager Core bundle org.wso2.carbon.user.core.UserStoreException: Cannot initialize the realm. at org.wso2.carbon.user.core.common.DefaultRealmService.initializeRealm(DefaultRealmService.java:286) at org.wso2.carbon.user.core.common.DefaultRealmService.<init>(DefaultRealmService.java:102) ::::::::::::::::::::::::::::::::::::::::::::::::: Caused by: java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:110) at ::::::::::::::::::::::::::::::::::::::::::: ERROR {org.wso2.carbon.user.core.internal.Activator} - Cannot start User Manager Core bundle org.wso2.carbon.user.core.UserStoreException: Cannot initialize the realm. at org.wso2.carbon.user.core.common.DefaultRealmService.initializeRealm(DefaultRealmService.java:286) :::::::::::::::::::::::::::::::::::::::::: Caused by: org.wso2.carbon.user.core.UserStoreException: DB error occurred while persisting domain : PRIMARY & tenant id : -1234
最初のいくつかの例外を見ると、エラーはMySQL接続と、「 com.mysql.cj.jdbc.exceptions.SQLError」で発生した例外が原因であることがわかりました。 ‘はそれを確認します。 MySQLコネクタに問題があるようで、Googleですばやく検索すると、この問題はMySQLバージョン8で一般的に報告されていることがわかりました。
システムがMySQLの最新バージョン(バージョン8.0.26)に更新されたようです。ごく最近、MySQL 8バージョンでいくつかの問題を修正しました。これを確認したい場合に備えて、今、この問題に戻ります。ほとんどのフォーラムは、'allowPublicKeyRetrieval=true'
を追加することを提案しました MySQL接続URLに接続すると、それも機能しました。
WSO2で、「allowPublicKeyRetrieval=true
」を追加します ‘をdeployment.toml
に 以下に示すようなファイル:
[database.apim_db] type = "mysql" #Henry - Retain mysql connnection string as localhost always url = "jdbc:mysql://localhost:3306/apim_db?useSSL=false&allowPublicKeyRetrieval=true" ............. [database.shared_db] type = "mysql" #Henry - Retain mysql connnection string as localhost always url = "jdbc:mysql://localhost:3306/shared_db?useSSL=false&allowPublicKeyRetrieval=true" ........................
注 :&
; allowPublicKeyRetrieval=true
の前 接続URLで。 「&amp;」の代わりに「&」だけを追加すると、次のエラーが発生します:
Caused by: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character '=' (code 61); expected a semi-colon after the reference for entity 'allowPublicKeyRetrieval' at [row,col {unknown-source}]: [39,100] ERROR {org.wso2.carbon.user.core.internal.Activator} - Cannot start User Manager Core bundle java.lang.RuntimeException: Error in looking up data source: Name [jdbc/SHARED_DB] is not bound in this Context. Unable to find [jdbc].
変更が完了したら、WSOサービスを再起動します。以上です!
オプションallowPublicKeyRetrieval=true
クライアントがサーバーに公開鍵を自動的に要求できるようにします。 MySQLオプションの詳細については、こちらをご覧ください。
実動サーバーでWSO2を実行している場合、useSSL=falseは推奨されません。 allowPublicKeyRetrieval=True
悪意のあるプロキシを介したman-in-the-middle攻撃により、プレーンテキストのパスワードを取得できる可能性があります。 allowPublicKeyRetrievalはデフォルトでFalseであり、明示的に有効にする必要があります。データベースへのセキュリティで保護された接続を使用している場合は、接続URLからuseSSL =falseを削除してみてください。これにより、問題が解決する可能性があります。