為您解碼網(wǎng)站建設(shè)的點(diǎn)點(diǎn)滴滴
發(fā)表日期:2019-01 文章編輯:小燈 瀏覽次數(shù):2476
在搭建Spring Cloud體系的過(guò)程中,默認(rèn)是使用非ssl(http)配置,搭建起來(lái)也相當(dāng)容易。也許是因?yàn)槭褂胹sl配置要稍復(fù)雜一些,也許是因?yàn)楹芏嗳丝紤]到使用ssl效率的問(wèn)題,或者又是因?yàn)閟sl證書(shū)費(fèi)用的問(wèn)題,再或者是因?yàn)樽约旱墓雀杓夹g(shù)不行,總之我沒(méi)能在網(wǎng)上找到任何關(guān)于Spring Cloud SSL配置的完整示例。所以接下來(lái),我會(huì)向大家演示一下Spring Cloud的ssl完整配置。因?yàn)槲易约旱哪芰τ邢蓿抑荒鼙WC所有的配置是我自己測(cè)試通過(guò)的,如果中間什么配置是錯(cuò)誤不可取的,還希望各位大神向我指出。
在開(kāi)始之前需要向大家說(shuō)明一下,這個(gè)系列不是手把手的基礎(chǔ)教程,就是說(shuō)我不會(huì)一步一步的向你普及spring cloud的使用,這方面已經(jīng)有很多很成熟的系統(tǒng)教程。我只是在我自己的理解的基礎(chǔ)上,補(bǔ)充一些網(wǎng)上沒(méi)有或者很少出現(xiàn)的一些東西。
首先我們從eureka開(kāi)始。為什么從它開(kāi)始,是因?yàn)閹缀跛械膕pring cloud教程都會(huì)先教你從服務(wù)注冊(cè)中心搭建開(kāi)始。
既然要使用ssl,那證書(shū)當(dāng)然是必不可少的,我們需要?jiǎng)?chuàng)建兩個(gè)證書(shū),eureka-server.jks和eureka-client.jks。這里我們使用keytool來(lái)生成我們的認(rèn)證證書(shū)。
keytool -genkey -alias eureka-server-storetype JKS -keyalg RSA -keysize 2048 -keystore eureka-server.jks -validity 365
keytool -genkey -alias eureka-client-storetype JKS -keyalg RSA -keysize 2048-keystore eureka-client.jks -validity 365
回車(chē)鍵后會(huì)讓你輸入密碼,然后在名字與姓氏中輸入你自己的ip地址。這樣服務(wù)端和客戶端的證書(shū)就生成好了。接下來(lái)我們需要從生成的jks中導(dǎo)出公鑰證書(shū)。
keytool -export -alias eureka-server -keystore eureka-server.jks -rfc -file eureka-server.cer
keytool -export -alias eureka-client -keystore eureka-client.jks -rfc -file eureka-client.cer
這里會(huì)要求你輸入上一步你設(shè)置的密碼,執(zhí)行成功后會(huì)提示 存儲(chǔ)在文件 eureka-server.cer中的證書(shū)。然后把公鑰證書(shū)導(dǎo)入到truststore中:
keytool -import -alias eureka-server -trust -file eureka-server.cer -keystore eureka-server-trust.jks
keytool -import -alias eureka-client -trust -file eureka-client.cer -keystore eureka-client-trust.jks
最后將服務(wù)端與客戶端的公鑰證書(shū)導(dǎo)入到彼此的truststore中:
keytool -import -alias eureka-client-file eureka-client.cer -keystore eureka-server-trust.jks
keytool -import -alias eureka-server-file eureka-server.cer -keystore eureka-client-trust.jks
至此ssl需要的證書(shū)我們就生成好了。
構(gòu)建ssl服務(wù)發(fā)現(xiàn)中心與平常的服務(wù)發(fā)現(xiàn)中心沒(méi)有什么區(qū)別,只是會(huì)在你的配置文件中添加幾項(xiàng)配置。
首先將生成的eureka-server.jks與eureka-server-trust.jks主在resources目錄。然后在application.yml文件中做如下配置:
server: port: ${PORT:8443} ssl: enabled: true key-store: classpath:eureka-server.jks key-store-password: 你設(shè)置的密碼 trust-store: classpath:eureka-server-trust.jks trust-store-password:你設(shè)置的密碼 key-alias: eureka-server eureka: instance: #根據(jù)需要,如果只使用ssl可設(shè)置為false non-secure-port-enabled: true non-secure-port: 8080 secure-port-enabled: true secure-port: ${server.port} client: register-with-eureka: false fetch-registry: false service-url: #localhost需要修改為你證書(shū)中配置的地址 defaultZone: 'https://localhost:${server.port}/eureka/'
如果你和我一樣,啟用了non-secure-port-enabled=true,即服務(wù)注冊(cè)中心可以同時(shí)支持http與https注冊(cè),那還需要將non-secure-port添加到端口監(jiān)聽(tīng):
@Value("${eureka.instance.non-secure-port}") privateStringnoSecurePort; @Bean publicIntegerport(){ return Integer.parseInt(noSecurePort); } @Bean publicEmbeddedServletContainerFactory servletContainer(){ TomcatEmbeddedServletContainerFactory tomcat=newTomcatEmbeddedServletContainerFactory(); tomcat.addAdditionalTomcatConnectors(createStandardConnector()); return tomcat; } privateConnector createStandardConnector(){ Connector connector=newConnector("org.apache.coyote.http11.Http11NioProtocol"); connector.setPort(port()); return connector; }
現(xiàn)在一個(gè)支持ssl的服務(wù)發(fā)現(xiàn)中心就配置好了,我的這個(gè)服務(wù)發(fā)現(xiàn)中心還同時(shí)支持http注冊(cè)。在瀏覽器中訪問(wèn)一下服務(wù)發(fā)現(xiàn)中心的兩個(gè)端口,都可以正常訪問(wèn)。
首先構(gòu)建一個(gè)正常的Spring Cloud客戶端應(yīng)用。也需要和配置服務(wù)發(fā)現(xiàn)中心一樣,導(dǎo)入證書(shū)密鑰庫(kù)。但這一步不太容易。因?yàn)镾pringCloud 并沒(méi)提供將證書(shū)密鑰庫(kù)傳遞給Eureka Client的方法。好在Eureka是使用Jersey實(shí)現(xiàn)服務(wù)端與客戶端之間的建立,并不是Spring RestTemplate。Spring Cloud Eureka是建立在Netflix OSS Eureka客戶端之上的,它不使用Spring庫(kù)。所以我們可以像配置Jersey SSL的方式來(lái)配置密鑰庫(kù)。但我們發(fā)現(xiàn),即使我們這樣配置好,在連接到服務(wù)注冊(cè)中心的SSL端口時(shí),Eureka Client同樣沒(méi)有使用ssl協(xié)議。這是因?yàn)椋瑢?duì)于像配置ssl這樣的一些高級(jí)配置,直接靠配置文件是無(wú)法配置的,我們需要?jiǎng)?chuàng)建一個(gè)DiscoveryClientOptionalArgs的Bean來(lái)配置。我將通過(guò)以下代碼片斷為大家演示如何為發(fā)現(xiàn)客戶端啟用SSL連接。
首先,我們使用javax.net.ssl.* Java系統(tǒng)屬性設(shè)置密鑰庫(kù)和信任庫(kù)文件的位置。然后,我們基于Java SSL設(shè)置提供Jersey客戶端的自定義實(shí)現(xiàn),并為DiscoveryClientOptionalArgs bean設(shè)置它。
@Configuration publicclassEurekaSslConfig{ @Value("${eureka.client.service-url.defaultZone}") privateStringdefaultZone; @Bean publicDiscoveryClient.DiscoveryClientOptionalArgs discoveryClientOptionalArgs(){ DiscoveryClient.DiscoveryClientOptionalArgs args=newDiscoveryClient.DiscoveryClientOptionalArgs(); System.setProperty("javax.net.ssl.keyStore","src/main/resources/eureka-client.jks"); System.setProperty("javax.net.ssl.keyStorePassword","你的密碼"); System.setProperty("javax.net.ssl.trustStore","src/main/resources/eureka-client-trust.jks"); System.setProperty("javax.net.ssl.trustStorePassword","你的密碼"); EurekaJerseyClientImpl.EurekaJerseyClientBuilder builder=newEurekaJerseyClientImpl.EurekaJerseyClientBuilder(); builder.withClientName("eureka-client"); if(defaultZone.startsWith("https://")){ builder.withSystemSSLConfiguration(); } builder.withMaxTotalConnections(10); builder.withMaxConnectionsPerHost(10); args.setEurekaJerseyClient(builder.build()); return args; } }
配置application.yml:
eureka: client: service-url: defaultZone:'https://localhost:8443/eureka/'
啟動(dòng)服務(wù)端與客戶端,查看發(fā)現(xiàn)中心頁(yè)面,一切正常。將defaultZone配置成http端口的訪問(wèn),也同樣正常注冊(cè)到服務(wù)發(fā)現(xiàn)中心。
配置Eureka的SSL主要是在客戶端配置密鑰庫(kù)那一步,通過(guò)正常的Spring Cloud的配置方式無(wú)法配置密鑰庫(kù)。
日期:2018-04 瀏覽次數(shù):6763
日期:2017-02 瀏覽次數(shù):3438
日期:2017-09 瀏覽次數(shù):3659
日期:2017-12 瀏覽次數(shù):3529
日期:2018-12 瀏覽次數(shù):4819
日期:2016-12 瀏覽次數(shù):4584
日期:2017-07 瀏覽次數(shù):13647
日期:2017-12 瀏覽次數(shù):3508
日期:2018-06 瀏覽次數(shù):4267
日期:2018-05 瀏覽次數(shù):4446
日期:2017-12 瀏覽次數(shù):3558
日期:2017-06 瀏覽次數(shù):3984
日期:2018-01 瀏覽次數(shù):3945
日期:2016-12 瀏覽次數(shù):3915
日期:2018-08 瀏覽次數(shù):4428
日期:2017-12 瀏覽次數(shù):3708
日期:2016-09 瀏覽次數(shù):6406
日期:2018-07 瀏覽次數(shù):3208
日期:2016-12 瀏覽次數(shù):3232
日期:2018-10 瀏覽次數(shù):3386
日期:2018-10 瀏覽次數(shù):3482
日期:2018-09 瀏覽次數(shù):3580
日期:2018-02 瀏覽次數(shù):3600
日期:2015-05 瀏覽次數(shù):3521
日期:2018-09 瀏覽次數(shù):3308
日期:2018-06 瀏覽次數(shù):3435
日期:2017-02 瀏覽次數(shù):3874
日期:2018-02 瀏覽次數(shù):4337
日期:2018-02 瀏覽次數(shù):4176
日期:2016-12 瀏覽次數(shù):3573
Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.