启用客户端和服务器之间的安全通信
到目前为止,Eureka Server没有对任何客户端的连接进行过身份验证。在开发模式中,安全性并不像生产模式那么重要。缺乏它可能是一个问题。我们希望通过基本身份验证保护发现服务器,以防止未经授权访问任何知道其网络地址的服务。尽管SpringCloud参考资料声称HTTP基本身份验证将自动添加到Eureka客户端,但开发人员仍必须在附属项目中包含一个具有安全性的启动器。
org. springf ramework. boot
spring-boot-starter-security
然后,开发人员应该通过更改application.yml文件中的配置设置来启用安全性,并且设置默认凭据。
security:
basic:
enabled: true
user:
name: admin
password: admin123
现在,所有HTTP API端点和Eureka仪表板都是安全的。要在客户端启用基本身份验证模式,应在URL连接地址中提供凭据,如以下配置设置中所示。实现安全发现的示例应用程序可在同一存 储库(ttps://github.com/piomin/sample-spring-cloud-etlix.git) 中找到,并且可用作基本示例,但开发人员需要切换到security 分支tps://github.com/piomin/sample- springcloud-etit/re/security)。以下是在客户端启用HTTP基本身份验证的配置。
eureka:
client:
serviceUrl:
defaultZone: http://admin: admin123@localhost:8761/eureka/
对于更高级的使用,如在发现客户端和服务器之间使用证书身份验证方式的安全SSL连接,开发人员应该提供
DiscoveryClientOptionalArgs的自定义实现。在本书第12章“保护API的安全”中将会讨论这样一个示例, 该示例将致力于保护Spring Cloud应用程序的安全。
保护服务器端的安全性是一回事,注册安全应用程序则是另一回事。现在让我们来看一看如何注册安全服务。
(1)要为Spring Boot应用程序启用安全套接层(Secure Sockets Layer, SSL) ,需要从生成自签名证书( Self-Signed Certificate)开始。建议使用keytool,它可以在bin目录中的JRE根目录下使用。
keytool -genkey -alias client -storetype PKCS12 -keyalg RSA -
keysize 2048 -keystore keystore.pl2 -validity 3650
(2)输入所需数据并将生成的密钥库文件keystore.p12 复制到应用程序的src/main/resources目录中,而接下来的步骤则是使用application.yml 中的配置属性为Spring Boot启用HTTPS。
server :
port: ${PORT:8081]
ssl:
key-store: classpath:keystore.p12
key- store-password: 123456
keyStoreType: PKCS12
keyAlias: client
(3)在运行应用程序之后,开发人员应该能够调用安全端点htpt:/cahost:/8761/info。此时还需要在Eureka客户端实例配置中执行一些更改。
eureka :
instance :
securePortEnabled: true
nonSecurePortEnabled: false
statusPageUrl: https://$ leureka. hostname} :S lserver.port}/info
heal thCheckUrl: https://$ {eureka. hostname} :S{server .port} /health
homePageUrl: https://$ (eureka . hostname):${server.port)/
大家如果需要的话可以扫码下方来获取: