Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu öğretici, Azure Key Vault ve Azure kaynakları için yönetilen kimlikler kullanarak Spring Boot (Azure Spring Apps dahil) uygulamalarınızı TLS/SSL sertifikaları ile nasıl güvenli hale getirebileceğinizi göstermektedir.
İster bulutta ister şirket içinde olsun üretim sınıfı Spring Boot uygulamaları, standart TLS protokollerini kullanarak ağ trafiği için uçtan uca şifreleme gerektirir. Karşınıza çıkan TLS/SSL sertifikalarının çoğu genel kök sertifika yetkilisinden (CA) bulunabilir. Ancak bazen bu bulma mümkün değildir. Sertifikalar bulunamıyorsa, uygulamanın bu tür sertifikaları yüklemek, bunları gelen ağ bağlantılarına sunmak ve giden ağ bağlantılarından kabul etmek için bir yolu olmalıdır.
Spring Boot uygulamaları genellikle sertifikaları yükleyerek TLS'yi etkinleştirir. Sertifikalar, Spring Boot uygulamasını çalıştıran JVM'nin yerel anahtar deposuna yüklenir. Azure'da Spring ile sertifikalar yerel olarak yüklenmez. Bunun yerine, Microsoft Azure için Spring tümleştirmesi, Azure Key Vault'un yardımı ve Azure kaynakları için yönetilen kimlik ile TLS'yi etkinleştirmek için güvenli ve sorunsuz bir yol sağlar.
Önemli
Spring Cloud Azure Sertifika başlangıç sürümü 4.x veya üzeri şu anda TLS/mTLS'yi desteklememektedir, yalnızca Key Vault sertifika istemcisini otomatik olarak yapılandırmaktadır. Bu nedenle, TLS/mTLS kullanmak istiyorsanız 4.x sürümüne geçiremezsiniz.
Önkoşullar
Azure aboneliği - ücretsizoluşturun.
Sürüm 11 ile desteklenen Java Development Kit (JDK).
Apache Maven sürüm 3.0 veya üzeri.
İşlevselliği test etmek için cURL veya benzer bir HTTP yardımcı programını
. Bir Azure sanal makine (VM) örneği. Eğer bir tane yoksa, az vm create komutunu ve UbuntuServer tarafından sağlanan Ubuntu görüntüsünü kullanarak, sistem tarafından atanan yönetilen kimliği etkinleştirilmiş bir VM örneği oluşturun. Sistem tarafından atanan yönetilen kimliğe
Contributor
rolünü verin ve ardından aboneliğinize erişim içinscope
'i ayarlayın.Azure Key Vault örneği. Eğer bir anahtar kasanız yoksa, Hızlı Başlangıç: Azure portalını kullanarak anahtar kasası oluşturmabölümüne bakın.
Spring Boot uygulaması. Eğer yoksa, Spring Initializrile bir Maven projesi oluşturun. Maven Project
seçtiğinizden emin olun ve Bağımlılıklar altında Spring Web bağımlılığını ekleyin, ardından Java versiyon 8 veya üzerini seçin.
Önemli
Bu makaledeki adımları tamamlamak için Spring Boot sürüm 2.5 veya üzeri gereklidir.
Otomatik olarak imzalanan TLS/SSL sertifikası ayarlama
Bu öğreticideki adımlar, doğrudan Azure Key Vault'ta depolanan tüm TLS/SSL sertifikaları (otomatik olarak imzalananlar dahil) için geçerlidir. Otomatik olarak imzalanan sertifikalar üretimde kullanıma uygun değildir, ancak geliştirme ve test uygulamaları için kullanışlıdır.
Bu öğreticide kendi kendine imzalanmış bir sertifika kullanılır. Sertifikayı ayarlamak için bkz. Hızlı Başlangıç:Azure portalını kullanarak Azure Key Vault'tan sertifika ayarlama ve alma.
Not
Sertifikayı ayarladıktan sonra, Key Vault erişim ilkesi atamaiçindeki yönergeleri izleyerek Key Vault'a VM erişimi verin.
TLS/SSL sertifikası aracılığıyla güvenli bağlantı
Artık bir VM'niz ve bir Key Vault örneğine sahipsiniz ve VM'ye Key Vault'a erişim izni vermişsiniz. Aşağıdaki bölümlerde Spring Boot uygulamasında Azure Key Vault'tan TLS/SSL sertifikaları aracılığıyla güvenli bir şekilde bağlanma işlemi gösterilmektedir. Bu öğreticide aşağıdaki iki senaryo gösterilmektedir:
- Güvenli gelen bağlantılarla Spring Boot uygulaması çalıştırma
- Güvenli giden bağlantılarla Spring Boot uygulaması çalıştırma
Bahşiş
Aşağıdaki adımlarda kod yürütülebilir bir dosyaya paketlenir ve VM'ye yüklenir. OpenJDK VM'ye yüklemeyi unutmayın.
Güvenli gelen bağlantılarla Spring Boot uygulaması çalıştırma
Gelen bağlantının TLS/SSL sertifikası Azure Key Vault'tan geldiğinde, aşağıdaki adımları izleyerek uygulamayı yapılandırın:
pom.xml dosyanıza aşağıdaki bağımlılıkları ekleyin:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>azure-spring-boot-starter-keyvault-certificates</artifactId> <version>3.14.0</version> </dependency>
application.properties yapılandırma dosyasında Key Vault kimlik bilgilerini yapılandırın.
server.ssl.key-alias=<the name of the certificate in Azure Key Vault to use> server.ssl.key-store-type=AzureKeyVault server.ssl.trust-store-type=AzureKeyVault server.port=8443 azure.keyvault.uri=<the URI of the Azure Key Vault to use>
Bu değerler, eğitimin başında bahsedildiği gibi Spring Boot uygulamasının yükleme eylemini TLS/SSL sertifikası için gerçekleştirmesini sağlar. Aşağıdaki tabloda özellik değerleri açıklanmaktadır.
Mülk Açıklama server.ssl.key-alias
--name
argümanınıaz keyvault certificate create
'e geçirdiğiniz değeri içindir.server.ssl.key-store-type
AzureKeyVault
olmalıdır.server.ssl.trust-store-type
AzureKeyVault
olmalıdır.server.port
HTTPS bağlantılarının dinlendiği yerel TCP bağlantı noktası. azure.keyvault.uri
vaultUri
'den döndürülen JSON'dakiaz keyvault create
özelliği. Bu değeri bir ortam değişkenine kaydettiniz.Key Vault'a özgü tek özellik
azure.keyvault.uri
. Uygulama, sistem tarafından atanan yönetilen kimliğe Key Vault erişimi verilmiş bir VM üzerinde çalışıyor. Bu nedenle uygulamaya erişim de verilmiştir.Bu değişiklikler Spring Boot uygulamasının TLS/SSL sertifikasını yüklemesini sağlar. Sonraki adımda, eğitimin başlangıcında belirtildiği gibi uygulamanın TLS/SSL sertifikası için eylemini
kabul etmesini sağlayacaksınız. Başlangıç sınıfı dosyasını aşağıdaki içeriklere sahip olacak şekilde düzenleyin.
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @SpringBootApplication @RestController public class SsltestApplication { public static void main(String[] args) { SpringApplication.run(SsltestApplication.class, args); } @GetMapping(value = "/ssl-test") public String inbound(){ return "Inbound TLS is working!!"; } @GetMapping(value = "/exit") public void exit() { System.exit(0); } }
Kimliği doğrulanmamış REST GET çağrısının içinden
System.exit(0)
çağırmak yalnızca tanıtım amaçlıdır.System.exit(0)
gerçek bir uygulamada kullanmayın.Bu kod, bu öğreticinin başında belirtilen ve'e ait eylemi gösterir. Aşağıdaki listede bu kodla ilgili bazı ayrıntılar vurgulanır:
- Artık Spring Initializr tarafından oluşturulan
@RestController
sınıfındaSsltestApplication
bir ek açıklama bulunmaktadır. -
@GetMapping
ile açıklamalı bir yöntem vardır, yaptığınız HTTP çağrısı içinvalue
ile. -
inbound
yöntemi, tarayıcı/ssl-test
yoluna HTTPS isteğinde bulunursa yalnızca bir selamlama döndürür.inbound
yöntemi, sunucunun TLS/SSL sertifikasını tarayıcıya nasıl sunmadığını gösterir. -
exit
yöntemi çağrıldığında JVM'nin çıkmasına neden olur. Bu yöntem, bu öğretici bağlamında örneği çalıştırmayı kolaylaştırmak için bir rahatlık sunar.
- Artık Spring Initializr tarafından oluşturulan
Kodu derlemek ve yürütülebilir jar dosyasına paketlemek için aşağıdaki komutları çalıştırın.
mvn clean package
<your-resource-group-name>
içinde oluşturulan ağ güvenlik grubunun IP adresinizden 22 ve 8443 bağlantı noktalarında gelen trafiğe izin verdiğinden emin olun. Ağ güvenlik grubu kurallarını gelen trafiğe izin verecek şekilde yapılandırma hakkında bilgi edinmek içinAğ güvenlik grubu oluşturma, değiştirme veya silme bölümüne bakın.Güvenlik kurallarıyla çalışma Yürütülebilir JAR dosyasını VM'ye yerleştirin.
cd target sftp azureuser@<your VM public IP address> put *.jar
Spring Boot uygulamasını derleyip VM'ye yüklediğinize göre, bunu VM'de çalıştırmak ve
curl
ile REST uç noktasını çağırmak için aşağıdaki adımları kullanın.SSH kullanarak VM'ye bağlanın ve yürütülebilir JAR dosyasını çalıştırın.
set -o noglob ssh azureuser@<your VM public IP address> "java -jar *.jar"
Yeni bir Bash kabuğu açın ve sunucunun TLS/SSL sertifikası sunduğunu doğrulamak için aşağıdaki komutu çalıştırın.
curl --insecure https://<your VM public IP address>:8443/ssl-test
Sunucuyu sonlandırmak ve ağ yuvalarını kapatmak için
exit
yolunu çağırın.curl --insecure https://<your VM public IP address>:8443/exit
Şimdi yük işlemini ve kendi imzalı TLS/SSL sertifikasıyla sunum eylemlerini gördüğünüze göre, kabul eylemini görmek için uygulamada bazı önemsiz değişiklikler yapın.
Güvenli giden bağlantılarla Spring Boot uygulaması çalıştırma
Bu bölümde, önceki bölümdeki kodu, giden bağlantılar için TLS/SSL sertifikasının Azure Key Vault'tan gelmesi için değiştireceksiniz. Bu nedenle, yükleme, sunmave kabul etme eylemleri Azure Key Vault'tan sağlanır.
apache HTTP istemci bağımlılığını pom.xml dosyanıza ekleyin:
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.13</version> </dependency>
ssl-test-outbound
adlı yeni bir rest uç noktası ekleyin. Bu uç nokta kendisine bir TLS yuvası açar ve TLS bağlantısının TLS/SSL sertifikasını kabul ettiğini doğrular. Başlangıç sınıfının önceki bölümünü aşağıdaki kodla değiştirin.import java.security.KeyStore; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSession; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import com.azure.security.keyvault.jca.KeyVaultLoadStoreParameter; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.conn.ssl.TrustSelfSignedStrategy; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.ssl.SSLContexts; @SpringBootApplication @RestController public class SsltestApplication { public static void main(String[] args) { SpringApplication.run(SsltestApplication.class, args); } @GetMapping(value = "/ssl-test") public String inbound(){ return "Inbound TLS is working!!"; } @GetMapping(value = "/ssl-test-outbound") public String outbound() throws Exception { KeyStore azureKeyVaultKeyStore = KeyStore.getInstance("AzureKeyVault"); KeyVaultLoadStoreParameter parameter = new KeyVaultLoadStoreParameter( System.getProperty("azure.keyvault.uri")); azureKeyVaultKeyStore.load(parameter); SSLContext sslContext = SSLContexts.custom() .loadTrustMaterial(azureKeyVaultKeyStore, null) .build(); HostnameVerifier allowAll = (String hostName, SSLSession session) -> true; SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext, allowAll); CloseableHttpClient httpClient = HttpClients.custom() .setSSLSocketFactory(csf) .build(); HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(); requestFactory.setHttpClient(httpClient); RestTemplate restTemplate = new RestTemplate(requestFactory); String sslTest = "https://localhost:8443/ssl-test"; ResponseEntity<String> response = restTemplate.getForEntity(sslTest, String.class); return "Outbound TLS " + (response.getStatusCode() == HttpStatus.OK ? "is" : "is not") + " Working!!"; } @GetMapping(value = "/exit") public void exit() { System.exit(0); } }
Kodu derlemek ve yürütülebilir jar dosyasına paketlemek için aşağıdaki komutları çalıştırın.
mvn clean package
Bu makalenin önceki bölümlerinde yer alan aynı
sftp
komutunu kullanarak uygulamayı yeniden karşıya yükleyin.cd target sftp <your VM public IP address> put *.jar
Uygulamayı VM'de çalıştırın.
set -o noglob ssh azureuser@<your VM public IP address> "java -jar *.jar"
Sunucu çalıştırıldıktan sonra sunucunun TLS/SSL sertifikasını kabul ettiğini doğrulayın. Önceki
curl
komutunu yayımladığınız Bash kabuğunda aşağıdaki komutu çalıştırın.curl --insecure https://<your VM public IP address>:8443/ssl-test-outbound
Outbound TLS is working!!
iletisini görmeniz gerekir.Sunucuyu sonlandırmak ve ağ yuvalarını kapatmak için
exit
yolunu çağırın.curl --insecure https://<your VM public IP address>:8443/exit
Azure Spring Apps'e Yayınla
Spring Boot uygulamasını yerel olarak çalıştırdığınıza göre artık uygulamayı üretim ortamına taşımanın zamanı geldi. Azure Spring Apps
Sonraki adımlar
Spring ve Azure hakkında daha fazla bilgi edinmek için Azure'da Spring belge merkezine geçin.
Spring geliştiricileri için Azure Spring Cloud Azure Key Vault sertifika örnekleri