Udostępnij za pośrednictwem


Konfigurowanie zabezpieczeń aplikacji Tomcat, JBoss lub Java SE w usłudze aplikacja systemu Azure

W tym artykule przedstawiono sposób konfigurowania ustawień zabezpieczeń specyficznych dla języka Java w usłudze App Service. Aplikacje Java działające w usłudze App Service mają ten sam zestaw najlepszych rozwiązań w zakresie zabezpieczeń co inne aplikacje.

Azure App Service uruchamia aplikacje internetowe Java na w pełni zarządzanej platformie w trzech wariantach:

  • Java Standard Edition (SE): może uruchomić aplikację wdrożoną jako pakiet Java Archive (JAR), który zawiera serwer osadzony (taki jak Spring Boot, Quarkus, Dropwizard lub aplikacja z osadzonym serwerem Tomcat lub Jetty).
  • Tomcat: Wbudowany serwer Tomcat może uruchamiać aplikację wdrożoną jako archiwum aplikacji internetowej (pakiet WAR).
  • JBoss Enterprise Application Platform (EAP): wbudowany serwer JBoss EAP może uruchomić aplikację wdrożona jako pakiet WAR lub Enterprise Archive (EAR). Obsługiwane dla aplikacji systemu Linux w zestawie poziomów cenowych, w tym Free, Premium v3 i Isolated v2.gti

Uwierzytelnianie użytkowników (Easy Auth)

Skonfiguruj uwierzytelnianie aplikacji w witrynie Azure Portal przy użyciu opcji Uwierzytelnianie i autoryzacja . W tym miejscu możesz włączyć uwierzytelnianie przy użyciu Microsoft Entra ID lub logowania społecznościowego, takiego jak Facebook, Google lub GitHub. Konfiguracja witryny Azure Portal działa tylko podczas konfigurowania pojedynczego dostawcy uwierzytelniania. Aby uzyskać więcej informacji, zobacz Configure your App Service app to use Microsoft Entra sign-in and the related articles for other identity providers (Konfigurowanie aplikacji usługi App Service pod kątem korzystania z logowania microsoft Entra ) i powiązanych artykułów dla innych dostawców tożsamości. Jeśli musisz włączyć wielu dostawców logowania, postępuj zgodnie z instrukcjami w temacie Dostosowywanie logów i wylogowywanie.

Deweloperzy platformy Spring Boot mogą używać startera Microsoft Entra Spring Boot do zabezpieczania aplikacji przy użyciu znanych adnotacji i interfejsów API rozwiązania Spring Security. Pamiętaj, aby zwiększyć maksymalny rozmiar nagłówka w pliku application.properties . Sugerujemy wartość 16384.

Aplikacja Tomcat może uzyskiwać dostęp do oświadczeń użytkownika bezpośrednio z serwletu przez rzutowanie obiektu Principal do obiektu Map. Obiekt Map mapuje każdy typ roszczenia na kolekcję roszczeń odpowiadającą temu typowi. W poniższym przykładzie kodowym request jest instancją HttpServletRequest.

Map<String, Collection<String>> map = (Map<String, Collection<String>>) request.getUserPrincipal();

Teraz możesz sprawdzić obiekt Map pod kątem konkretnego oświadczenia. Na przykład poniższy fragment kodu przechodzi przez wszystkie typy roszczeń i wyświetla zawartość każdej kolekcji.

for (Object key : map.keySet()) {
        Object value = map.get(key);
        if (value != null && value instanceof Collection {
            Collection claims = (Collection) value;
            for (Object claim : claims) {
                System.out.println(claims);
            }
        }
    }

Aby wylogować użytkowników, użyj ścieżki /.auth/ext/logout . Aby wykonać inne akcje, zobacz dokumentację dotyczącą dostosowywania logowania i wylogowywania. Istnieje również oficjalna dokumentacja interfejsu Tomcat HttpServletRequest i jego metod. Następujące metody serwletu są również nawodnione na podstawie konfiguracji usługi App Service:

public boolean isSecure()
public String getRemoteAddr()
public String getRemoteHost()
public String getScheme()
public int getServerPort()

Aby wyłączyć tę funkcję, utwórz ustawienie aplikacji o nazwie WEBSITE_AUTH_SKIP_PRINCIPAL z wartością 1. Aby wyłączyć wszystkie filtry serwletów dodane przez usługę App Service, utwórz ustawienie o nazwie WEBSITE_SKIP_FILTERS z wartością 1.

W przypadku aplikacji JBoss EAP zobacz kartę Tomcat.

Konfigurowanie protokołu TLS/SSL

Aby przekazać istniejący certyfikat TLS/SSL i powiązać go z nazwą domeny aplikacji, postępuj zgodnie z instrukcjami w temacie Zabezpieczanie niestandardowej nazwy DNS z powiązaniem TLS/SSL w usłudze Azure App Service. Aplikację można również skonfigurować tak, aby wymuszała protokół TLS/SSL.

Używanie odwołań do usługi KeyVault

Usługa Azure KeyVault zapewnia scentralizowane zarządzanie tajemnicami za pomocą zasad dostępu i historii audytu. Wpisy tajne (takie jak hasła lub parametry połączenia) można przechowywać w usłudze KeyVault i uzyskiwać dostęp do tych wpisów tajnych w aplikacji za pomocą zmiennych środowiskowych.

Najpierw postępuj zgodnie z instrukcjami dotyczącymi udzielania aplikacji dostępu do magazynu kluczy oraz tworzenia odwołania do magazynu kluczy w ustawieniach aplikacji dla Twojego sekretu. Możesz sprawdzić, czy odwołanie jest rozpoznawane jako wpis tajny, wyświetlając zmienną środowiskową podczas zdalnego uzyskiwania dostępu do terminalu usługi App Service.

Aby uzyskać informacje o plikach konfiguracji Spring, zapoznaj się z tą dokumentacją dotyczącą konfiguracji zewnętrznych.

Aby wstrzyknąć te sekrety w pliku konfiguracyjnym Spring, użyj składni iniekcji zmiennej środowiskowej (${MY_ENV_VAR}).

Aby wstrzyknąć te sekrety w pliku konfiguracji serwera Tomcat, użyj składni iniekcji zmiennej środowiskowej (${MY_ENV_VAR}).

Korzystanie z magazynu kluczy Java w systemie Linux

Domyślnie wszystkie certyfikaty publiczne lub prywatne przekazane do usługi App Service Dla systemu Linux są ładowane do odpowiednich magazynów kluczy Java podczas uruchamiania kontenera. Po przesłaniu certyfikatu, będziesz musiał ponownie uruchomić usługę App Service, aby załadował się do magazynu kluczy Java. Certyfikaty publiczne są ładowane do magazynu kluczy w $JRE_HOME/lib/security/cacerts, a certyfikaty prywatne są przechowywane w $JRE_HOME/lib/security/client.jks.

Do szyfrowania połączenia JDBC z certyfikatami w magazynie kluczy Java może być konieczna większa konfiguracja. Zapoznaj się z dokumentacją wybranego sterownika JDBC.

Inicjowanie magazynu kluczy Java w systemie Linux

Aby zainicjować obiekt, załaduj plik magazynu kluczy import java.security.KeyStore przy użyciu hasła. Domyślne hasło dla obu magazynów kluczy to changeit.

KeyStore keyStore = KeyStore.getInstance("jks");
keyStore.load(
    new FileInputStream(System.getenv("JRE_HOME")+"/lib/security/cacerts"),
    "changeit".toCharArray());

KeyStore keyStore = KeyStore.getInstance("pkcs12");
keyStore.load(
    new FileInputStream(System.getenv("JRE_HOME")+"/lib/security/client.jks"),
    "changeit".toCharArray());

Ręczne ładowanie magazynu kluczy w systemie Linux

Certyfikaty można załadować ręcznie do magazynu kluczy. Utwórz ustawienie aplikacji, SKIP_JAVA_KEYSTORE_LOAD, z wartością 1, aby uniemożliwić usłudze App Service automatyczne ładowanie certyfikatów do magazynu kluczy. Wszystkie certyfikaty publiczne przekazane do usługi App Service za pośrednictwem witryny Azure Portal są przechowywane w obszarze /var/ssl/certs/. Certyfikaty prywatne są przechowywane w obszarze /var/ssl/private/.

Możesz wchodzić w interakcję z narzędziem Java Key Tool lub debugować go, otwierając połączenie SSH z usługą App Service i uruchamiając polecenie keytool. Zapoznaj się z dokumentacją Narzędzia Key, aby uzyskać listę poleceń. Aby uzyskać więcej informacji na temat interfejsu API magazynu kluczy, zobacz oficjalną dokumentację.

Następne kroki

Odwiedź centrum Azure for Java Developers aby znaleźć przewodniki Szybki start, samouczki i dokumentację referencyjną języka Java na platformie Azure.