Eureka Server启用 https服务指北
文章共 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
过程如下:
- 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: 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-store
和 ssl.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方式访问注册中心方可:
- 启动 Eureka Client后,由于其已经加入了对 https的配置,因此可以验证通过并且注册到 Eureka Server注册中心:
如此一番实践下来,微服务注册中心的安全性就更进了一步。
后 记
由于能力有限,若有错误或者不当之处,还请大家批评指正,一起学习交流!
- My Personal Blog:CodeSheep 程序羊
- 我的半年技术博客之路

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
从源码里解析vue中的nextTick的用法
今天做了一个需求,场景是这样的: 在页面拉取一个接口,这个接口返回一些数据,这些数据是这个页面的一个浮层组件要依赖的,然后我在接口一返回数据就展示了这个浮层组件,展示的同时,上报一些数据给后台(这些数据就是父组件从接口拿的),这个时候,神奇的事情发生了,虽然我拿到数据了,但是浮层展现的时候,这些数据还未更新到组件上去。 父组件: <template> ..... <pop ref="pop" :name="name"/> </template> <script> export default { ..... created() { .... // 请求数据,并从接口获取数据 Data.get({ url: xxxx, success: (data) => { // 问题出现在这里,我们赋值以后直接调用show方法,去展现,show方法调用的同时上报数据,而上报的数据这个时候还未更新到子组件 this.name = data.name this.$refs.pop.show() } }) } } </script> 子组件...
- 下一篇
Flask框架web开发:零基础入门
Flask框架是Python开发的一个基于Werkzeug和Jinja 2的web开发微框架,它的优势就是极其简洁,但又非常灵活,而且容易学习和应用。因此Flask框架是Python新手快速开始web开发最好的选择,此外,使用Flask框架的另一个好处在于你可以非常轻松地将基于Python的机器学习算法或数据分析算法集成到web应用中。 如果希望深入学习Flask Web开发,推荐这个教程: 深入浅出Flask 1、可以用Flask框架做什么 从博客应用到克隆一个facebook或者twitter,理论上你可以用Flask做任何事情。有很多库可以直接使用,例如flask-sockets,flask-google-maps等,而且Flask框架支持MySQL、Postgresql、MongoDB等诸多数据库。 我能想到的一些可以用Flask框架实现的web应用类型:博客应用、聊天应用、仪表盘应用、RESTAPI、管理页面、邮件服务等。 安装Flask 使用pip安装Flask: $ pip install flask 2、Hello,World 创建一个文件app.py,然后只需要几个简...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2全家桶,快速入门学习开发网站教程
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,CentOS8安装Elasticsearch6.8.6
- 2048小游戏-低调大师作品
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7