文档章节

Eureka Server启用 https服务指北

CodeSheep
 CodeSheep
发布于 2018/12/11 08:02
字数 792
阅读 306
收藏 13

New Mac Mini

文章共 591字,阅读大约需要 2分钟 !


概 述

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

注: 本文首发于 My Personal Blog:CodeSheep·程序羊,欢迎光临 小站


证书准备

这里使用 JDK自带的 keytools 来创建证书

  • Server 端证书生成
keytool -genkeypair -alias server -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore codesheepserver.p12 -validity 3800

过程如下:

Server 端证书生成过程

  • 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 会要求你输入密码

导出 server端的 p12证书

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

导出的证书在此:

导出 client端的 p12证书

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

过程如下:

配置 Client端信任 Server端的证书

  • 配置 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: server

eureka:
  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: 1112
spring:
  application:
    name: eureka-client
eureka:
  client:
    securePortEnabled: true
    serviceUrl:
      defaultZone: https://localhost:1111/eureka/
ssl:
  key-store: codesheepclient.p12
  key-store-password: codesheep.cn

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

@Configuration
public 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;
    }
}

这段代码的主要意图就是通过设置一个 SSLContext用于 Eureka Client访问 Eureka Server。


实验验证

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

非 https的方式是无法访问注册中心的

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

以 https方式访问注册中心方可

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

服务已经注册上来

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


后 记

由于能力有限,若有错误或者不当之处,还请大家批评指正,一起学习交流!



© 著作权归作者所有

共有 人打赏支持
CodeSheep

CodeSheep

粉丝 216
博文 74
码字总数 101759
作品 0
南京
程序员
私信 提问
Spring Cloud - Eureka

Eureka 在Spring Cloud体系中,eureka承担着服务注册与发现的任务,在整个微服务架构中起着整合作用。eureka的一些概念: 服务提供者 provider,指一个将自身的功能接口暴露出来的应用。 服务...

jinzili777
2017/10/25
0
0
java B2B2C电子商务平台分析之十五-----EureKa服务注册与发现

什么是服务发现与服务注册 简单的来说就是一个微服务要调用另一个微服务,就必须知道这个微服务的地址及端口信息。采用一张注册表,注册上线可用的微服务及相关信息,微服务则从注册表上查找...

明理萝
2018/12/05
0
0
白话SpringCloud | 第二章:服务注册与发现(Eureka)-上

前言 从本章节开始,正式进入的基础教程。从第一章《什么是SpringCloud》中我们可以知道,一个微服务框架覆盖的东西是很多的,而如何去管理这些服务或者说接口,就显得异常重要了。所以本章节...

oKong
2018/09/06
0
0
《Spring Cloud Netflix》 -- 服务注册和服务发现-Eureka 的使用

一、Spring Cloud Netflix 该项目是Spring Cloud的核心子项目,是对Netflix公司一系列开源产品的封装。它为Spring Boot应用提供了自配置的整合,只需要通过一些简单的注解,就可以快速地在S...

登录404
2017/04/18
276
0
白话SpringCloud | 第三章:服务注册与发现-高可用配置(Eureka)-下

前言 上一章节,讲解了在单机模式下的服务注册与发现的相关知识点及简单示例。而在实际生产或者在这种微服务架构的分布式环境中,需要考虑发生故障时,各组件的高可用。而其实高可用,我的简...

oKong
2018/09/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

《大话数据结构》读后总结(四)

一、算法 1、算法效率的度量方法 1.1 事后统计方法 通过设计好的测试程序和数据,利用计算机计时器对不同算法编制的程序的运行时间进行比较,从而确定算法效率的高低。该方法具有很大缺陷,不...

徐曙辉
46分钟前
2
0
Android 整体设计及背后意义

阿里妹导读:现实工作中经常可以听到这样的说法:框架的升级带来协议性能的提升、编程模式的变革带来业务的飞跃...... 姑且不论这些表述是否有问题,实际上如果系统地看待事物整体,可能会有...

阿里云云栖社区
48分钟前
2
0
一文纵览EMAS 到底内含多少阿里核心技术能力

EMAS的整体定位是阿里巴巴移动技术对外输出的主窗口,沉淀了阿里巴巴近10年在移动互联网技术架构上的积累以及在一系列垂直场景中所实践的核心技术能力。一方面,EMAS希望为广大开发者提供安全...

阿里云官方博客
今天
2
0
Prometheus2.8简介

Prometheus是什么? Prometheus(普罗米修斯)是一套最初在SoundCloud上构建的开源监视和告警系统 。 特征 普罗米修斯的主要特点是: 具有由度量名称和键/值对标识的时间序列数据的多维数据模...

阿dai学长
今天
2
0
Android 动画Animation

动画分为视图动画(view animation)和属性动画(property animation),视图动画又分为帧动画和补间动画 视图动画控件(iv)点击事件(OnClickListener接口)触发位置在原位置 1.帧动画(Fra...

Coding缘
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部