http转https_springcloud搭建HTTPS安全通道

我们公司现在使用springcloud做的微服务架构项目,默认消息流都是HTTP通道,引入HTTPS通道整体的消息流大概为:

v2-fbb3d7559471b1bb69f3af2055b432f4_b.jpg
springcloud引入HTTPS通道后的消息流

其实总体的消息流和HTTP相比是没有变化的,只不过先放在最开始让我们梳理一下要做哪些事情。

基本概念

1、秘钥库:存储一条条的秘钥,第一次使用keytool -genkey生成的文件为一个秘钥库和一条秘钥,后续可以为这个文件(即秘钥库)继续添加秘钥

2、信任库:truststore是放服务端信任的客户端证书的一个store(或者客户端放服务端的),里存放的是只包含公钥的数字证书,代表了可以信任的证书

3、秘钥库类型:本文全部保持PCK12类型,类型可能会导致秘钥库的加密等处理方式不一样,我们使用时不会感知到

基本命令

v2-47d50e58a5b325945d7fcb59a64853ba_b.jpg

v2-ef8b6c948e66eb4171928b5b049106ac_b.jpg

1、查看证书库中所有的证书

keytool -list -keystore D:keykeystore2.p12 -storepass XXX

2、从证书库中导出证书

keytool -export -alias server2 -file D:keyservercert2.cer -keystore D:keykeystore2.p12

3、导入JVM信任证书

keytool -import -alias server2 -keystore "C:Program FilesJavajdk1.8.0_191jrelibsecuritycacerts" -file D:keyservercert2.cer -storepass changeit

4、同时生成秘钥库和秘钥对

keytool -genkey -alias server -keyalg RSA -storetype PKCS12 -keystore D:keykeystore4.p12 -storepass XXX -validity 36500 -ext SAN=dns:localhost,dns:abc,ip:127.0.0.1 -dname "CN=10.1.4.41,OU=csoa,O=csoa,L=FZ,ST=FZ,C=CN"

关键问题

1、alias意义:后面跟着的是秘钥对名称

2、SAN意义:后面跟着的是在哪些域名和IP生效,暂未找到怎么配置可以在任何IP和域名都生效的,所以跟随者现网的IP不通需要生成不同的证书,但是我们可以让自己的服务尽量的使用域名注册到eureka上,其他服务使用域名访问,比如下面的业务配置就是使用localhost进行注册

HTTP转HTTPS

eureka

server

关键的点有

1、server.ssl

2、eureka.instance

这边就是配置一下秘钥库,打开eureka的前天,就是HTTPS的了

v2-16b1f2ac6536dcd53782c227532b45ea_b.jpg

zuul

server

关键配置:

1、server.ssl(配置秘钥库)

2、ribbon.IsSecure(服务访问网关之后,网关使用Ribbon进行转发,如果不配置此项,Ribbon就会使用HTTP协议转发,配置了之后就是HTTPS)

3、将证书加入到JVM信任库中

keytool -import -alias server2 -keystore "C:Program FilesJavajdk1.8.0_191jrelibsecuritycacerts" -file D:keyservercert2.cer -storepass changeit

(changeit是虚拟机默认的密码)

导入之后就可以zuul就会信任所导入的证书的服务,从而可以进行转发

4、eureka:instance:hostname: localhost不要使用IP进行注册

验证:

可以做一个网关的Filter拦截请求,看看是否生效

import 

业务

和zuul几乎一样

server:
  port: 9132
  servlet:
    context-path: /
    session:
      cookie:
        name: OAUTH2SESSION
  tomcat:
    uri-encoding: UTF-8
    use-forward-headers: true

  ssl:
    key-store: serverkeystore.p12
    key-store-password: XXX
    keyStoreType: PKCS12
    keyAlias: server

feign:
  hystrix:
    enabled: true

hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 60000
          strategy: SEMAPHORE

ribbon:
  ReadTimeout: 30000
  ConnectTimeout: 60000
  MaxAutoRetries: 0
  MaxAutoRetriesNextServer: 1

eureka:
  instance:
    hostname: localhost
  client:
    serviceUrl:
      defaultZone: https://127.0.0.1:9001/eureka/

mybatis:
  config‐location: classpath:mybatis/mybatis-config.xml

logging:
  config: classpath:log-config/logback.xml

关键配置

1、server.ssl(配置秘钥库)

2、将证书加入到JVM信任库中

keytool -import -alias server2 -keystore "C:Program FilesJavajdk1.8.0_191jrelibsecuritycacerts" -file D:keyservercert2.cer -storepass changeit

(changeit是虚拟机默认的密码)

导入之后就可以zuul就会信任所导入的证书的服务,从而可以进行转发

3、eureka:instance:hostname: localhost不要使用IP进行注册

问题

1、使用postman调用后台失败,Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/octet-stream' not supported](这个和HTTPS没有关系。。。。。)

v2-8ff3d2a9d9d761632f0153cce4e63f32_b.jpg

2、zuul注册eurake报找不到请求目标的证书

v2-45d4a88d4023f1adf7b7f83e90a425cd_b.jpg

原因:证书没有导入到JVM的证书库中

3、显示IP在证书中没有被匹配到

v2-f7abe08325ac1c735e373c5a1cb250c5_b.jpg

生成的证书没有设置ext SAN

难点

像上面说的,证书生成的时候需要指定域名和IP,如果使用IP进行服务间的调用,就需要单独生成生产环境的证书,所以尽量使用域名调用,生成证书的时候添加域名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值