文章共 591字,阅读大约需要 2分钟,文尾有计时器可自行对时!

概 述

在前文《Eureka Server 开启Spring Security Basic认证》中已经给 Eureka Server 开启了最基本的鉴权措施,本文则让 HTTPS加持于 Eureka Server,让安全措施来的更彻底一点。

注: 本文首发于 作者公众号 CodeSheep ,可 长按 / 扫描 下面的 小心心 来订阅 ↓ ↓ ↓

证书准备

这里使用 JDK自带的 keytools 来创建证书
  • Server 端证书生成
    keytool -genkeypair -alias server -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore codesheepserver.p12 -validity 3800

过程如下:

  • Client 端证书生成
keytool -genkeypair -alias client -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore codesheepclient.p12 -validity 3800

过程类似,就不再截图了

  • 分别导出 server端和 client端的 p12证书
    keytool -export -alias server -file codesheepserver.crt --keystore codesheepserver.p12 会要求你输入密码

keytool -export -alias client -file codesheepclient.crt --keystore codesheepclient.p12

导出的证书在此:

  • 配置 Client端信任 Server端的证书
    keytool -import -alias server -file codesheepserver.crt -keystore codesheepclient.p12

过程如下:

  • 配置 Server端信任 Client端的证书

    keytool -import -alias client -file codesheepclient.crt -keystore codesheepserver.p12

过程与上面类似,也不截图展示了

证书文件准备妥当之后,接下来进行项目代码级别的配置

Eureka Server SSL配置

我们需要在 Eureka Server的 Spring Boot项目中的 application.yml配置文件里将上文中生成的证书配到项目中去,即下面这段配置中与 server.ssl相关的部分:

server:  port: 1111  ssl:    enabled: true    key-store: classpath:codesheepserver.p12    key-store-password: codesheep.cn    key-store-type: PKCS12    key-alias: servereureka:  instance:    hostname: localhost    securePort: 1111    securePortEnabled: true    nonSecurePortEnabled: false  client:    registerWithEureka: false    fetchRegistry: false

Eureka Client SSL配置

类似地,我们也在 Eureka Client的 Spring Boot项目中的 application.yml配置文件里将上文中生成的证书配到项目中去:

server:  port: 1112spring:  application:    name: eureka-clienteureka:  client:    securePortEnabled: true    serviceUrl:      defaultZone: https://localhost:1111/eureka/ssl:  key-store: codesheepclient.p12  key-store-password: codesheep.cn

但注意此处的 ssl.key-store 和 ssl.key-store-password只是我们自定义的属性,我们需要结合自己编写的 ssl配置类 EurekaClientHttpsCfg来进行使用,代码如下:

@Configurationpublic class EurekaClientHttpsCfg {    @Value("${ssl.key-store}")    String keyStoreFileName;    @Value("${ssl.key-store-password}")    String keyStorePassword;    @Bean    public DiscoveryClient.DiscoveryClientOptionalArgs discoveryClientOptionalArgs() throws CertificateException, NoSuchAlgorithmException, KeyStoreException, IOException, KeyManagementException {        EurekaJerseyClientImpl.EurekaJerseyClientBuilder builder = new EurekaJerseyClientImpl.EurekaJerseyClientBuilder();        builder.withClientName("eureka-client");        SSLContext sslContext = new SSLContextBuilder()                .loadTrustMaterial(                        this.getClass().getClassLoader().getResource(keyStoreFileName),keyStorePassword.toCharArray()                )                .build();        builder.withCustomSSL(sslContext);        builder.withMaxTotalConnections(10);        builder.withMaxConnectionsPerHost(10);        DiscoveryClient.DiscoveryClientOptionalArgs args = new DiscoveryClient.DiscoveryClientOptionalArgs();        args.setEurekaJerseyClient(builder.build());        return args;    }}

实验验证

  • 启动 Eureka Server,由于其开启了 https访问,因此浏览器以非 https方式访问时就不通了

浏览器必须以 https方式访问注册中心方可:

  • 启动 Eureka Client后,由于其已经加入了对 https的配置,因此可以验证通过并且注册到 Eureka Server注册中心:

如此一番实践下来,微服务注册中心的安全性就更进了一步。

后 记

由于能力有限,若有错误或者不当之处,还请大家批评指正,一起学习交流!
 个人网站:www.codesheep.cn (程序羊)

我的更多系列原创文章:

● 我的半年技术博客之路

● 利用K8S技术栈打造个人私有云系列连载文章

● 从一份配置清单详解Nginx服务器配置

● Spring Boot Admin 2.0开箱体验

● 一文上手 Elasticsearch常用可视化管理工具

● Docker容器可视化监控中心搭建

● 利用ELK搭建Docker容器化应用日志中心

● RPC框架实践之:Google gRPC

● 一文详解 Linux系统常用监控工具

作者更多 务实、能看懂、可复现的 原创文章尽在公众号 CodeSheep,欢迎订阅 ⬇️⬇️⬇️

©著作权归作者所有:来自51CTO博客作者mb5fdcae83766b7的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 分布式事务 TCC-Transaction 源码分析 —— 项目实战
  2. 注册中心 Eureka 源码解析 —— 项目结构简介
  3. 【51CTO学员故事】6年拿下8个软考证书
  4. nginx配置ssl证书访问不了https网站
  5. PMP证书获得历程
  6. 给Python初学者的最好练手项目,进来看就对了!
  7. 小奎因的 PYTHON 项目部署与调度直播分享来了
  8. 项目里文件名永远不要用中文!永远不要!
  9. 在ADC设备上安装SSL证书时出现错误:“证书无效”

随机推荐

  1. Android(安卓)第三方开源SwipeToDismiss:
  2. Android(安卓)Studio自动生成带系统签名
  3. Android(安卓)Camera 使用小结
  4. Android(安卓)事件传递机制
  5. Android插件技术——(一)动态加载jar
  6. android音频编辑之音频合成
  7. 使用TraceView进行方法跟踪
  8. android 自定义RadioButton样式
  9. Android基础开源应用项目
  10. Android(安卓)studio搭建helloworld案例