文章共 591字,閱讀大約須要 2分鐘 !
在個人前文《Eureka Server 開啓Spring Security Basic認證》中已經給 Eureka Server 開啓了最基本的鑑權措施,本文則讓 HTTPS加持於 Eureka Server,讓安全措施來的更完全一點。spring
注: 本文首發於 My Personal Blog:CodeSheep·程序羊,歡迎光臨 小站
這裏使用 JDK自帶的 keytools 來建立證書
keytool -genkeypair -alias server -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore codesheepserver.p12 -validity 3800
過程以下:瀏覽器
keytool -genkeypair -alias client -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore codesheepclient.p12 -validity 3800
過程相似,就再也不截圖了安全
keytool -export -alias server -file codesheepserver.crt --keystore codesheepserver.p12 會要求你輸入密碼
keytool -export -alias client -file codesheepclient.crt --keystore codesheepclient.p12
導出的證書在此:app
keytool -import -alias server -file codesheepserver.crt -keystore codesheepclient.p12
過程以下:微服務
keytool -import -alias client -file codesheepclient.crt -keystore codesheepserver.p12
過程與上面相似,也不截圖展現了學習
證書文件準備穩當以後,接下來進行項目代碼級別的配置
咱們須要在 Eureka Server的 Spring Boot項目中的 application.yml
配置文件裏將上文中生成的證書配到項目中去,即下面這段配置中與 server.ssl
相關的部分:fetch
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的 Spring Boot項目中的 application.yml
配置文件裏將上文中生成的證書配到項目中去:ui
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
來進行使用,代碼以下:this
@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。spa
瀏覽器必須以 https方式訪問註冊中心方可:
如此一番實踐下來,微服務註冊中心的安全性就更進了一步。
因爲能力有限,如有錯誤或者不當之處,還請你們批評指正,一塊兒學習交流!