当前位置: 移动技术网 > IT编程>开发语言>Java > Eureka启用HTTPS

Eureka启用HTTPS

2019年08月22日  | 移动技术网IT编程  | 我要评论
  1. 为eureka client生成证书

    client:keytool -genkeypair -alias client -storetype pkcs12 -keyalg rsa -keysize 2048 -keystore client.p12 -validity 3650
    输入密钥库口令:
    再次输入新口令:
    您的名字与姓氏是什么?
      [unknown]:
    您的组织单位名称是什么?
      [unknown]:
    您的组织名称是什么?
      [unknown]:
    您所在的城市或区域名称是什么?
      [unknown]:
    您所在的省/市/自治区名称是什么?
      [unknown]:
    该单位的双字母国家/地区代码是什么?
      [unknown]:
    cn=unknown, ou=unknown, o=unknown, l=unknown, st=unknown, c=unknown是否正确?
      [否]:  y

    eureka client证书的密码设置的是:client

  2. 为eureka serveer生成证书

    keytool -genkeypair -alias server -storetype pkcs12 -keyalg rsa -keysize 2048 -keystore server.p12 -validity 3650
    输入密钥库口令:
    再次输入新口令:
    您的名字与姓氏是什么?
      [unknown]:
    您的组织单位名称是什么?
      [unknown]:
    您的组织名称是什么?
      [unknown]:
    您所在的城市或区域名称是什么?
      [unknown]:
    您所在的省/市/自治区名称是什么?
      [unknown]:
    该单位的双字母国家/地区代码是什么?
      [unknown]:
    cn=unknown, ou=unknown, o=unknown, l=unknown, st=unknown, c=unknown是否正确?
      [否]:  y

    eureka client证书的密码设置的是:server

    经过上面两个操作之后,当前目录下会生成两个.p12文件,分别是client.p12和server.p12。

  3. 下面分别导出两个p12证书,如下:

    keytool -export -alias client -file client.crt --keystore client.p12
    输入密钥库口令:
    存储在文件 <client.crt> 中的证书
    keytool -export -alias server -file server.crt --keystore server.p12
    输入密钥库口令:
    存储在文件 <server.crt> 中的证书
  4. 接下来,将server.crt文件导入client.p12中,使client端信任server的证书

    keytool -import -alias server -file server.crt -keystore client.p12
    输入密钥库口令:
    所有者: cn=unknown, ou=unknown, o=unknown, l=unknown, st=unknown, c=unknown
    发布者: cn=unknown, ou=unknown, o=unknown, l=unknown, st=unknown, c=unknown
    序列号: 1835fea4
    有效期开始日期: wed aug 21 11:37:51 cst 2019, 截止日期: sat aug 18 11:37:51 cst 2029
    
    证书指纹:
             md5: 6e:4b:26:19:44:dd:1a:f2:de:f8:b8:25:a0:17:28:da
             sha1: 87:5c:4f:84:6b:d6:e5:6d:4e:1c:61:b6:87:99:1e:ad:85:6f:31:75
             sha256: e4:47:2b:f5:d2:73:0e:81:64:b7:0f:a1:0a:99:b4:41:8f:d9:a3:5a:e4:15:7c:58:36:00:b5:e9:af:8f:81:23
             签名算法名称: sha256withrsa
             版本: 3
    
    扩展:
    
    #1: objectid: 2.5.29.14 criticality=false
    subjectkeyidentifier [
    keyidentifier [
    0000: 19 48 c8 13 bb 25 de ff   9b 72 9f ec b0 d4 6c 91  .h...%...r....l.
    0010: 2f f5 b2 14                                        /...
    ]
    ]
    
    是否信任此证书? [否]:  y
    证书已添加到密钥库中

    这里输入client.p12的密码:client。

    将client.crt文件导入server.p12中,使server端信任client的证书

    keytool -import -alias client -file client.crt -keystore server.p12
    输入密钥库口令:
    所有者: cn=unknown, ou=unknown, o=unknown, l=unknown, st=unknown, c=unknown
    发布者: cn=unknown, ou=unknown, o=unknown, l=unknown, st=unknown, c=unknown
    序列号: 6e0b1e14
    有效期开始日期: wed aug 21 11:39:23 cst 2019, 截止日期: sat aug 18 11:39:23 cst 2029
    
    证书指纹:
             md5: c3:75:bc:d1:01:21:e0:e1:ea:c7:88:d0:bd:2c:3b:d3
             sha1: 7e:58:1c:86:5f:28:b0:6f:69:a2:47:e6:32:3d:b6:8a:32:20:34:4e
             sha256: c2:97:d0:68:df:32:e2:cc:c0:7d:23:74:89:e3:37:ec:92:db:41:6b:ee:13:c0:d7:5a:d0:c9:45:f1:86:cb:c1
             签名算法名称: sha256withrsa
             版本: 3
    
    扩展:
    
    #1: objectid: 2.5.29.14 criticality=false
    subjectkeyidentifier [
    keyidentifier [
    0000: e8 48 cb cb 3a e9 96 b4   03 50 b7 fa 53 8a e3 71  .h..:....p..s..q
    0010: fd c3 eb 74                                        ...t
    ]
    ]
    
    是否信任此证书? [否]:  y
    证书已添加到密钥库中

    这里输入server.p12的密码:server。

  5. 创建eureka-server工程,将server.p12文件放到resources目录下,并在application.yml下配置如下信息。

    server:
      port: 8761
      ssl:
        enabled: true
        key-store: classpath:server.p12
        key-alias: server
        key-store-type: pkcs12
        key-store-password: server
    eureka:
      instance:
        hostname: localhost
        secure-port: 443
        secure-port-enabled: true
        non-secure-port-enabled: false  #该实例应该接收通信的非安全端口是否启用,默认为true
        home-page-url: https://${eureka.instance.hostname}:${server.port}/
        status-page-url: https://${eureka.instance.hostname}:${server.port}/
      client:
        fetch-registry: false
        register-with-eureka: false
        service-url:
          defaultzone: https://${eureka.instance.hostname}:${server.port}/eureka
      server:
        wait-time-in-ms-when-sync-empty: 0
        enable-self-preservation: false
    

    启动eureka-server,访问https://localhost:8761/发现可以使用https进行访问。

    创建eureka-client工程,将client.p12文件放到resources目录下,并在application.yml下配置如下信息。

    server:
      port: 8080
    eureka:
      client:
        secureportenabled: true
        ssl:
          key-store: client.p12
          key-store-password: client
        service-url:
          defaultzone: https://localhost:8761/eureka
    spring:
      application:
        name: eureka-client

    我们这里没有指定整个应用实例启用https,仅仅是开启访问eureka-server的https配置。通过自定义配置eureka.client.ssl.key-store和eureka.client.ssl.key-store-password两个属性,指定eureka-client访问eureka-server的sslcontext配置。这里需要在代码里指定discoveryclient.discoveryclientoptionalargs。

    在eureka-client项目下新增一个配置类eurekahttpsclientconfig,代码如下。

    @configuration
    public class eurekahttpsclientconfig {
    
        @value("${eureka.client.ssl.key-store}")
        string keystorefilename;
    
        @value("${eureka.client.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-https-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;
        }
    }

    上面的代码还需要httpclient的依赖

    <dependency>
        <groupid>org.apache.httpcomponents</groupid>
        <artifactid>httpclient</artifactid>
        <version>4.5.5</version>
    </dependency>

    启动eureka-client,发现eureka-client已经成功注册到eureka-server上了。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网