spring-boot-admin 监控服务 使用自签发ssl证书的问题

前置说明

创建 SpringBoot Admin Server 应用,引入spring-boot-admin-starter-server依赖,并且在启动类上加上@EnableAdminServer注解

<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-server</artifactId>
</dependency>

然后通过在需要监控的应用中加上

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-client</artifactId>
    <version>2.3.1</version>
</dependency>

配置启用监控端点,以及 SpringBood Admin Server 的地址

management:
  endpoints:
    enabled-by-default: true #配置启用所有端点
    web:
      exposure:
        include: "*" #web端暴露所有端点
spring:
  boot:
    admin:
      client:
        url: http://localhost:8888 #配置 Admin Server的地址

即可通过SpringBoot Admin Server 应用地址查看服务的实时运行状态

问题

spring-boot-admin 监控服务 使用自签发ssl证书的问题

问题一:监控服务的 url 名称

上面的 url 为什么是域名,不是 localhost 或者是内网的 ip 名称

问题二:证书识别问题

服务没有加上自签证书时没有任何问题,但是由于该项目是在内网中运行,并且为了安全,所有的服务都加上了 SSL 证书,在服务启动后,所有的服务都无法成功注册到 SpringBoot Admin Server 中,通过各个地方查找,最后发现需要使用jdk里面的cacerts才行,但是这些证书都是自己使用keytool生成的,所以需要将自签导入到 jdk 中

解决过程

既然监控的服务的地址不是 ip,那就重新自签一个和该地址相同的别名的证书,但是后面发现,其实此监控的服务的域名是由服务器的 hostname 决定的,要么修改主机名,要么生成证书的别名和主机名一样。

# 使用 crt 和 p12 生成 p12 证书
openssl pkcs12 -export -in client.crt -inkey client.key -out iot.p12 -name "别名"

项目中所用到的证书都是.p12格式的证书,需要将此格式先转成.cer格式,先查看证书中的别名信息,用作之后证书的格式转换

keytool -list -v -keystore xxx.p12 -storepass 证书密码

看到 Alias 是啥后,进行证书格式转换

keytool -export -alias 证书别名 -keystore xxx.p12 -storetype PKCS12 -rfc -file xxx.cer

将转换后的证书导入到 jdk 中

keytool -import -trustcacerts -alias 证书别名 -file xxx.cer -keystore $JAVA_HOME/jre/lib/security/cacerts

回车后会提示输入密钥库口令,注意此口令不是证书密码,默认是changeit,然后会询问是否信任此证书,根据语言环境,输入是或者是yes,此时就会提示证书已添加到密钥库中。

可以查看一下,此时证书是否已经导入到 jdk中

keytool -list -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit

此时可以看到导入进的证书的信息

证书别名, 日期, trustedCertEntry,
证书指纹 (SHA-256): xxxx

当然如果用不到此证书,想要删除只需执行如下命令即可

Keytool -delete -alias xx -keystore $JAVA_HOME/jre/lib/security/cacerts  -storepass changeit

结果

此时启动 jar 包时使用信任的库
java -Djavax.net.ssl.trustStore=$JAVA_HOME/jre/lib/security/cacerts -jar xxx.jar

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
247
粉丝
18
喜欢
217
收藏
62
排名:731
访问:9753
私信
所有博文
社区赞助商