Het SSH protocol ondersteunt vele authenticatie methoden. Ongetwijfeld een van de belangrijkste is Public Key authenticatie voor interactieve en geautomatiseerde verbindingen.
Sublic Key authenticatie – wat en waarom?
De motivatie om public key authenticatie te gebruiken in plaats van eenvoudige wachtwoorden is veiligheid. Publieke sleutelauthenticatie biedt cryptografische kracht die zelfs extreem lange wachtwoorden niet kunnen bieden. Met SSH verbetert publieke sleutelauthenticatie de veiligheid aanzienlijk, omdat gebruikers geen ingewikkelde wachtwoorden hoeven te onthouden (of erger nog, op te schrijven).
Naast veiligheid biedt publieke sleutelauthenticatie ook voordelen voor de bruikbaarheid – het stelt gebruikers in staat single sign-on te implementeren op alle SSH-servers waarmee ze verbinding maken. Publieke sleutelauthenticatie maakt ook geautomatiseerd inloggen zonder wachtwoord mogelijk, wat een belangrijke voorwaarde is voor de talloze veilige automatiseringsprocessen die wereldwijd binnen bedrijfsnetwerken worden uitgevoerd.
Publieke sleutelcryptografie draait om een paar sleutelconcepten. In de onderstaande paragrafen worden deze kort toegelicht.
Asymmetrische Cryptografie – Algoritmen
Zoals bij elk encryptieschema, is publieke sleutel-authenticatie gebaseerd op een algoritme. Er zijn verschillende goed onderzochte, veilige en betrouwbare algoritmen – de meest voorkomende zijn RSA en DSA. In tegenstelling tot de algemeen bekende (symmetrische of geheime-sleutel) versleutelingsalgoritmen werken de openbare-sleutel-versleutelingsalgoritmen met twee afzonderlijke sleutels. Deze twee sleutels vormen een paar dat specifiek is voor iedere gebruiker.
Sleutelpaar – Publiek en privaat
In de SSH publieke sleutel authenticatie use case, is het nogal typisch dat de gebruikers het sleutelpaar voor zichzelf maken (d.w.z. beschikbaar stellen). SSH-implementaties bevatten eenvoudig te gebruiken hulpprogramma’s hiervoor (voor meer informatie, zie ssh-keygen en ssh-copy-id).
Elk SSH-sleutelpaar bevat twee sleutels:
-
Een publieke sleutel die naar de SSH-server(s) wordt gekopieerd. Iedereen met een kopie van de publieke sleutel kan gegevens versleutelen die vervolgens alleen kunnen worden gelezen door de persoon die in het bezit is van de bijbehorende private sleutel. Zodra een SSH-server een publieke sleutel van een gebruiker ontvangt en de sleutel betrouwbaar acht, markeert de server de sleutel als geautoriseerd in zijn authorized_keys bestand. Dergelijke sleutels worden geautoriseerde sleutels genoemd.
-
Een privésleutel die (alleen) bij de gebruiker blijft. Het bezit van deze sleutel vormt het bewijs van de identiteit van de gebruiker. Alleen een gebruiker die in het bezit is van een privé-sleutel die overeenkomt met de openbare sleutel op de server, kan zich met succes authentiseren. De particuliere sleutels moeten zorgvuldig worden opgeslagen en behandeld, en er mogen geen kopieën van de particuliere sleutel worden verspreid. De private sleutels die voor de gebruikersauthenticatie worden gebruikt, worden identiteitssleutels genoemd.
Instellen van Public Key Authenticatie voor SSH
De volgende eenvoudige stappen zijn nodig om authenticatie met een publieke sleutel (voor SSH) in te stellen:
-
Het sleutelpaar wordt aangemaakt (meestal door de gebruiker). Dit wordt gewoonlijk gedaan met ssh-keygen.
-
De privésleutel blijft bij de gebruiker (en alleen daar), terwijl de publieke sleutel naar de server wordt gestuurd. Meestal met het hulpprogramma ssh-copy-id.
-
De server slaat de openbare sleutel op (en “markeert” deze als geautoriseerd).
-
De server geeft nu toegang aan iedereen die kan aantonen dat hij de bijbehorende privésleutel heeft.
Handling of the Private Key
Het is uiterst belangrijk dat de privacy van de privésleutel zorgvuldig wordt bewaakt. Voor de meeste gebruikersgestuurde toepassingen wordt dit bereikt door de private sleutel te versleutelen met een passphrase.
Wanneer een private sleutel nodig is, wordt de gebruiker gevraagd de passphrase te verstrekken, zodat de private sleutel kan worden ontsleuteld. De afhandeling van passphrases kan worden geautomatiseerd met een SSH agent.
In de meeste geautomatiseerde use cases (scripts, applicaties, etc) worden de private sleutels niet beschermd en is zorgvuldige planning en sleutelbeheer nodig om veilig te blijven en te voldoen aan de wettelijke mandaten.
Van Chaos naar Orde – SSH Sleutelbeheer
In omgevingen waar gebruikers vrij zijn om zelf authenticatie sleutels aan te maken is het gebruikelijk dat in de loop der jaren het aantal aangemaakte en ingezette sleutels erg groot wordt. Omdat er geen manier is om uit te vinden wie de eigenaar is van een publieke sleutel op een server, en omdat deze sleutels nooit verlopen, kan de werkelijke status van toegangscontrole in grote onbeheerde omgevingen erg onduidelijk of zelfs chaotisch zijn.
Het beheren en controleren van de toegang tot servers en andere IT-infrastructuur is een wettelijke vereiste voor elke onderneming die op gereguleerde markten opereert, zoals financiën, energie, gezondheidszorg, of handel. Deze ondernemingen moeten oplossingen voor SSH-sleutelbeheer gebruiken om de toegang te controleren die door SSH-sleutels wordt verleend.