GNU/Linux >> Tutoriales Linux >  >> Linux

No se permite la recuperación de clave pública:error de WSO2 MySQL

He estado usando WSO2 API Manager durante casi un año para exponer API de manera fácil y segura a consumidores internos y externos. Todo funcionaba bien hasta que se desactivó el sistema para realizar actividades de mantenimiento. Cuando el sistema se reanudó al servicio normal, WSO2 no pudo iniciarse con algunas excepciones en el wso2carbon.log archivo – “Causado por:com.mysql.cj.exceptions.UnableToConnectException:no se permite la recuperación de clave pública”. En este artículo, compartiré la solución.

Error de recuperación de clave pública no permitida:WSO2 con MySQL 8.*

Además del error anterior, pude ver algunas excepciones más en wso2carbon.log archivo, y aquí está la copia del mismo.

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

Mirando las primeras excepciones, entendí que el error se debe a la conexión de MySQL y la excepción causada en 'com.mysql.cj.jdbc.exceptions.SQLError ' lo confirma. El conector de MySQL parece tener algún problema y una búsqueda rápida en Google reveló que el problema se informó comúnmente en la versión 8 de MySQL.

El sistema parece haberse actualizado a la última versión de MySQL, es decir, la versión 8.0.26. Hace muy poco solucioné un par de problemas en la versión MySQL 8, en caso de que quieras echarle un vistazo. Ahora volviendo a este tema. La mayoría de los foros sugirieron agregar 'allowPublicKeyRetrieval=true' a la URL de conexión de MySQL y también funcionó.

En WSO2, agregue 'allowPublicKeyRetrieval=true ‘ al deployment.toml archivo como se muestra a continuación:

[database.apim_db]
type = "mysql"
#Henry - Retain mysql connnection string as localhost always
url = "jdbc:mysql://localhost:3306/apim_db?useSSL=false&amp;allowPublicKeyRetrieval=true"
.............

[database.shared_db]
type = "mysql"
#Henry - Retain mysql connnection string as localhost always
url = "jdbc:mysql://localhost:3306/shared_db?useSSL=false&amp;allowPublicKeyRetrieval=true"
........................

Nota :el &amp; antes de allowPublicKeyRetrieval=true en la URL de conexión. Agregar solo '&' en lugar de '&' daría como resultado el siguiente error:

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].

Una vez realizados los cambios, reinicie el servicio WSO. ¡Eso es!

La opción allowPublicKeyRetrieval=true permite al cliente solicitar automáticamente la clave pública del servidor. Lea más sobre las opciones de MySQL aquí.

Precaución

Si está ejecutando WSO2 en un servidor de producción, no se recomienda useSSL=false. allowPublicKeyRetrieval=True podría permitir un ataque man-in-the-middle a través de un proxy malicioso para obtener la contraseña de texto sin formato. allowPublicKeyRetrieval es False de forma predeterminada y debe habilitarse explícitamente. Si utiliza una conexión segura a la base de datos, intente eliminar useSSL=false de la URL de conexión y eso podría solucionar el problema.


Linux
  1. Cómo reparar el error GPG sin clave pública NO_PUBKEY durante la actualización de apt-get

  2. error de crontab:"Usted (usuario) no puede acceder a (crontab) debido a la configuración de pam".

  3. gpg:comando no encontrado

  4. MySQL - ERROR 1045 - Acceso denegado

  5. MySQL falla en:mysql ERROR 1524 (HY000):el complemento 'auth_socket' no está cargado

Conceptos básicos de encriptación en criptografía

La devolución de llamada registrada no coincide con la URL proporcionada:corrija el error de WSO2

c_rehash:Error de comando no encontrado – Solución

If…else…if Declaración (error de comando no encontrado)?

¿Ssh no acepta la clave pública?

Cómo agregar una clave pública SSH al servidor