Se cambia la contraseña de nacos, lo que provoca que seata no se inicie (análisis del código fuente)

¡Continúe creando, acelere el crecimiento! Este es el tercer día de mi participación en el "Nuggets Daily New Plan · June Update Challenge", haz clic para ver los detalles del evento


Acabo de levantarme hoy y recibí 实施人员una llamada mortal: 咋回事呢?表单数据咋保存不了了呢?=_=

Buen chico, después de escuchar esto, me quedé ciego, estaba realmente calvo, ¡y llamé a la muerte por la mañana! ! !

imagen.png

Pensé para mis adentros, ¿amigo no parece estar haciendo nada? ¡Cual es la situación! ! !

imagen.png

Espera, lo pienso, parece que nacos未授权访问的漏洞fue reparado ayer ¿Será por esto?

Luego volví rápidamente a la empresa y revisé el servidor. El bueno es realmente este, y seata cuelga. ¡Las transacciones distribuidas fallan, lo que hace que el formulario no se guarde! ! !

Este es de hecho el problema de un amigo, ¡no noté este problema! ! !

¿No se deducirá de los salarios? ? ?

imagen.png

Bien, hablemos de eso hoy, nacos habilita la autenticación y cambia la contraseña. Transacción distribuida de Seata, problema de falla de inicio, discusión e investigación. ! !

¡El problema de la falla de autenticación ha sido informado 403y resuelto! ! !

1. Notas importantes

La versión en la que se presenta el problema tendrá seatalo 1.4.2siguiente .

Corrección de errores 2.nacos

La vulnerabilidad de acceso no autorizado de nacos se solucionó antes, se habilitó el acceso de autenticación de nacos y se modificó la contraseña.

vi nacos/conf/application.properties

#开启认证配置
nacos.core.auth.enabled=true
复制代码

imagen-20220526115547418.png

Cambia la contraseña a:nacos123!@

3. Asiento de salida

Se han cambiado las contraseñas de los archivos de configuración nacos123!@, ¡pero no se puede activar seata! ! !

imagen-20220526120034644.png

imagen-20220526123106028.png

Seata ha integrado nacos como centro de configuración y centro de registro. No se discutirá en detalle cómo integrarlo aquí. Puede consultar aquí

imagen-20220526123243400.png

Luego, encontré algunas respuestas en Internet, ¡se dice que la contraseña tiene caracteres especiales y se escapa! ! !

imagen-20220526123406145.png

Bueno, entonces cambiemos la contraseña de nacos, cámbiela a nacos123, elimine los símbolos especiales y pruébela:

imagen-20220526123553039.png

image-20220526123640605.png

Buen chico, la puesta en marcha fue exitosa, ¡este es realmente el problema! ! !

image-20220526123748880.png

4. Análisis de causas

看到这里,咱们不禁得想一下,究竟是哪里对密码进行了转义呢?

有好奇心的同学,咱们继续往下看,从源码中分析一下,找到转义的代码。

开干!!!

seata源码构建。可以参考这里:点击查看,这里就不再一 一讲解了!!!

现在,咱们一步步进行debug调试:

  • 直接启动server.java

image-20220526124806092.png

image-20220526125034041.png

启动报错了,NacosConfiguration出错了。那我们进入到NacosConfiguration类去看一下报错的地方。

这个错是NacosConfiguration输出的,我们可以通过输出的日志定位到具体的位置,但是这里没有,所以我们将断点,打到所有的logger上面来。

image-20220526125535650.png

可以看到是NacosConfiguration.getLatestConfig方法打印的错误日志信息。

说明是configService.getConfig方法抛弃异常了,那我们进入configService.getConfig方法查看。

image-20220526134846878.png

以上就是一步步调试,进入的方法图了,最终是NacosRestTemplate的execute方法,执行http请求,与nacos进行交互

那我们在execute方法,打个断点。

image-20220526135427339.png

很明显,已经快要找到原因了,已经看到password,确实是被转义了。

接下来,对方法调用栈一步步往上找,即可。

image-20220526135911713.png

很明显可以看到,就是这里的问题了:SecurityProxy类,login方法,URLEncoder.encode(password, "utf-8")

注意:nacos-client的版本是1.3.3

原因找到了!!!

image-20220526140234635.png

好的,看到这里,基本上,咱们就已经知道password被转义具体的原因了,也能知道是在哪里被转义了。

看到这里,咱们就有点奇怪了,seata版本是1.4.1,为啥用1.3.3版本的nacos-client呢?

难道这里,会有什么猫腻?

带着这个问题,我们看一下1.4.1版本的nacos-clientSecurityProxy类。

image-20220526140550882.png

Vea aquí, la versión 1.4.1 de nacos-client ya no codifica la contraseña.

¡Bien por usted! ! !

image-20220526140951031.png

Entonces, pensé, ¿es esto un error oficial? Código fuente de la versión Seata1.4.1, ¿por qué usar la versión 1.3.3 de nacos-client para construirlo?

image-20220526141637750.png

De hecho, es el cliente nacos de la versión 1.3.3.

¿Todavía no te rindes, entonces echa un vistazo a la versión 1.4.2 de seata? : dependencias pom

image-20220526141842305.png

La versión 1.4.2 de seata es también la versión 1.3.3 de nacos-client

Oficial, realmente te tengo! ! !

image-20220526142320615.png

Solución final:

1. Actualizar la versión seata, al menos superior a 1.4.2. (No sé si la versión 1.5.1 solucionó este error o no. ¡Se lo daré a alguien que esté destinado a probarlo!)

2. Modificar la contraseña de nacos sin caracteres especiales.

3. Para el código fuente de seata de la versión 1.4.1, modifique la versión de nacos-client a 1.4.1 y reconstruya el servicio de seata. (¡No sé qué pozos habrá, se lo daré a alguien que esté destinado a probarlo!)

Al final, aquí estoy, no quiero tirar más, elige la segunda manera, ¡rápido! ! !

¡La simulación está completa! ! !

image-20220526142708885.png

Bueno, el cambio de la contraseña de nacos ha provocado que seata no se inicie (análisis del código fuente), ¡así que aquí está! ! !

¡Estoy aquí primero hoy, rozando, rozando! ! ! ^_^

Si lo encuentras útil, ¡ayuda por favor 点个赞! ! !

image.png

Supongo que te gusta

Origin juejin.im/post/7102413947596177416
Recomendado
Clasificación