Vad är hemligheter och hur du hanterar dem i Java
Hemligheter är teckensträngar som inte ska delas med omvärlden: de kan vara databaslösenord, privata krypteringsnycklar, personliga åtkomsttoken och så vidare. För ökad säkerhet anser många också att allt som kan hjälpa en angripare bör betraktas som en hemlighet: till exempel kan URL:en till produktionsdatabasen ses som en hemlighet. Databasen bör inte vara offentligt tillgänglig. Anledningen är att den här typen av information är känslig av naturen, och ju mindre information som är tillgänglig i din kod, desto bättre.
Vad är Nolltillit och noll hemligheter?
Begreppet Nolltillit är att ingen ska vara blint betrodd och få åtkomst till företagets resurser utan att verifieras och auktoriseras.
Det här konceptet gäller även för webbprogram: de bör inte ha hemligheter lagrade i sin kod eller i sina sista binärfiler. Det är vad vi kallar Noll hemligheter.
Hemligheter bör hanteras av ett externt system, med strikta åtkomstregler och verifiering, för att minska risken för angrepp.
Placera inte hemligheter i Git-lagringsplatser
Även om git-lagringsplatsen är privat är det en dålig idé att placera någon hemlighet i källkoden:
- Alla som har åtkomst till din lagringsplats känner till dina känsliga data
 - Alla som har åtkomst till din programbinärfil kan extrahera hemligheter från den
 
När en hemlighet har lagrats på en Git-lagringsplats kan angripare också alltid hitta den genom att titta i lagringsplatsens historik, där den kan glömmas bort efter en lång tid.
Även om det verkar praktiskt att göra det bör du aldrig lagra några hemligheter i din källkodslagringsplats. För att undvika det här problemet kan du använda automatiska verktyg som regelbundet kontrollerar din lagringsplats och skickar varningar om de hittar ett lösenord eller en databas-URL som lagras av misstag.
Använda miljövariabler
Den enklaste lösningen för att hantera hemligheter är att använda miljövariabler. De har flera fördelar:
- De är enkla att använda
 - De fungerar på alla system (även i lokala system)
 - Alla känner dem och förstår hur de fungerar
 
De är dock inte tillräckligt säkra: alla processer i systemet kan läsa dem och de exponeras enkelt med hjälp av Java Management Extensions (JMX) i ett Java-system.
Därför ses miljövariabler ofta som ett första steg mot Nolltillit: de är säkrare än att lagra hemligheter direkt i källkoden, men de saknar hanteringsfunktioner och är lätta att komma åt för angripare.
Använda Kubernetes-hemligheter
Kubernetes har en uppfattning om secrets, vilket är en annan bra lösning. Dessa hemligheter kan läsas in som en fil i programmets filsystem: ett Java-program kan sedan läsa filen vid start för att få åtkomst till dessa hemligheter. Verktyg som Spring Frameworks har till och med standardstöd för den här mekanismen, så att de kan använda dessa hemligheter på ett enkelt och effektivt sätt.
Den här mekanismen är säkrare än miljövariabler, eftersom dessa filer endast kan läsas av den process som kräver dem. De drar också nytta av det rika Kubernetes-ekosystemet och de kan hanteras av olika hanteringsverktyg, inklusive de verktyg som tillhandahålls av molnleverantören.
Även om Kubernetes-hemligheter är en bra lösning för Kubernetes är de också begränsade till Kubernetes och saknar avancerade hanteringsfunktioner, beroende på vilka verktyg som används för att hantera Kubernetes-infrastrukturen.
Använda ett hemlighetsarkiv
En hemlighetsbutik, som Hashicorp Vault eller Azure Key Vault, är specialiserad programvara för att hantera hemligheter. Det erbjuder ett omfattande hanteringssystem för att auktorisera användare, rotera säkerhetsnycklar och verifiera vilket program som kan komma åt vilken hemlighet.
De tillhandahåller också ett externt API, så att de kan användas i alla system. Du kan till exempel använda Azure Key Vault på alla Azure-tjänster, inklusive virtuella datorer, Azure App Services, Azure Kubernetes Services eller Azure Spring Apps.
Ett hemlighetsarkiv är den säkraste lösningen för att hantera hemligheter, men de kräver användning av ett dedikerat verktyg.