Definition

OpenSSL

Was ist OpenSSL?

OpenSSL ist ein Open-Source-Kryptographie-Toolkit, das die sichere Kommunikation zwischen Endpunkten in einem Netzwerk ermöglicht. Das Toolkit umfasst drei Kernkomponenten: die libcrypto-Bibliothek, die libssl-Bibliothek und ein Befehlszeilenprogramm zur Durchführung kryptografischer Aufgaben.

Die libcrypto-Bibliothek

Diese Bibliothek bietet eine Vielzahl von Programmierschnittstellen (APIs) für die Durchführung von Kryptographie für allgemeine Zwecke. Sie ermöglicht auch den Zugriff auf eine breite Palette von kryptografischen Algorithmen, die in verschiedenen Internetstandards verwendet werden. Die Bibliothek unterstützt verschiedene Arten von kryptografischen Funktionen für allgemeine Zwecke, darunter symmetrische Verschlüsselung, Zertifikatsverarbeitung, Public-Key-Kryptografie, Pseudozufallszahlengenerierung und kryptografische Hash-Funktionen.

Die libssl-Bibliothek

Diese Bibliothek enthält die notwendigen Funktionen, um eine sichere Peer-to-Peer-Kommunikation zu ermöglichen. Die Bibliothek hängt von der libcrypto-Bibliothek ab und nutzt viele ihrer Fähigkeiten. Die libssl-Bibliothek bietet Implementierungen mehrerer sicherer Netzwerkkommunikationsprotokolle, einschließlich des TLS-Protokolls (Transport Layer Security), dem weit verbreiteten Nachfolger von Secure Sockets Layer (SSL). Die libssl-Bibliothek unterstützt nach wie vor SSL Version 3, allerdings nur als Option zur Kompilierzeit. Darüber hinaus bietet die Bibliothek Implementierungen des Datagramm-TLS-Protokolls (DTLS) und des Quick-UDP-Internet-Connections-Protokolls (QUIC), einem neueren, von Google entwickelten Transportprotokoll.

Das Kommandozeilenprogramm openssl

Das Befehlszeilenprogramm openssl ist ein nützliches Werkzeug zur Durchführung einer Reihe von kryptografischen Aufgaben. So können Benutzer beispielsweise Schlüsselparameter erstellen, X.509-Zertifikate erzeugen, Message Digests berechnen, Dateien ver- oder entschlüsseln und Zertifikatsignierungsanforderungen oder Zertifikatssperrlisten erzeugen. Benutzer können auch TLS- und DTLS-Client- und -Server-Tests sowie QUIC-Client-Tests durchführen.

Um eine Liste der verfügbaren openssl-Befehle anzuzeigen, können Benutzer openssl -help an einer Eingabeaufforderung auf einem System eingeben, auf dem das OpenSSL-Toolkit installiert ist. Sie können auch sehen, welche Version von OpenSSL installiert ist, indem sie den Befehl openssl version -a eingeben. Da der Befehl die Option -a enthält, gibt er die Versionsdetails sowie die Verzeichnisse zurück, in denen Zertifikate, private Schlüssel, Konfigurationsdateien und andere Dateitypen gespeichert sind.

Laut dem Forschungsbericht mit dem Titel „Global State of Exposure: OpenSSL Vulnerabilities“ von Bitsight aus dem Jahr 2022, einem Unternehmen für Cybersecurity-Bewertungen, verwendeten zu dem Zeitpunkt zwei Drittel der weltweiten Webserver OpenSSL. Obwohl die meisten OpenSSL-Komponenten in C geschrieben sind, gibt es Wrapper für eine Vielzahl anderer Computersprachen, die den Zugriff auf die OpenSSL-Bibliotheken ermöglichen.

Das OpenSSL-Projekt ist für die Entwicklung und Pflege von OpenSSL verantwortlich, das unter der Apache v2-Lizenz vertrieben wird. Diese Lizenz gilt jedoch nur für OpenSSL 3.0 oder höher. Frühere Versionen werden unter den dualen OpenSSL- und SSLeay-Lizenzen lizenziert, in denen die Bedingungen beider Lizenzen gelten. Die neueste Version von OpenSSL ist 3.2.1, die am 30. Januar 2024 veröffentlicht wurde.

OpenSSL-Provider

OpenSSL macht ausgiebig Gebrauch von Providern, um den Zugriff auf Algorithmus-Implementierungen zu erleichtern. Ein Provider ist im Wesentlichen ein Container, der mehrere Algorithmus-Implementierungen enthält, wobei es einen Typ von Provider gibt, der keine Algorithmen enthält. Die OpenSSL-Distribution enthält die folgenden fünf Kern-Provider:

  • Default. Dieser Provider umfasst alle standardmäßig eingebauten Algorithmus-Implementierungen in OpenSSL, einschließlich Secure Hash Algorithm 3 (SHA-3), Message Digest Method 5 (MD-5), Advanced Encryption Standard (AES), Secure Hash Algorithm Keccak (SHAKE), SEED, Cipher-based Message Authentication Code (CMAC), TLS 1 pseudo-random function (TLS1-PRF), X448 und Rivest-Shamir-Adleman (RSA). Wenn eine Anwendung keinen Provider angibt, wird der Standard-Provider verwendet. Der Provider wird automatisch beim ersten Zugriffsversuch auf einen seiner Algorithmen geladen, wenn kein anderer Provider geladen wurde. Da es sich um einen integrierten Provider handelt, wird er kompiliert und in die libcrypto-Bibliothek eingebunden.
  • Legacy. Dieser Provider enthält die Algorithmen, die nicht mehr allgemein verwendet werden oder von deren Verwendung aus Sicherheitsgründen abgeraten wird. Der Legacy-Provider unterstützt Legacy-Anwendungen und bietet Abwärtskompatibilität. Er enthält auch Algorithmen wie Message Digest Method 4 (MD-4), Multi-Domain Command and Control (MDC2), CAST, Blowfish, International Data Encryption Algorithm (IDEA), RC5, Data Encryption Standard (DES) und RMD160.
  • Base. Dieser Provider enthält eine kleine Teilmenge der nicht kryptografischen Algorithmen, die im Standard-Provider enthalten sind, z. B. die Schlüsselaustauschverfahren X448 und X25519 sowie den Digital Signature Algorithm (DSA). Der Provider enthält zum Beispiel Algorithmen zur Serialisierung und Deserialisierung von Dateischlüsseln. Das OpenSSL-Projekt empfiehlt, dass Benutzer, die den Standard-Provider nicht laden, stattdessen diesen laden sollten.
  • FIPS. Dieser Anbieter enthält eine Untergruppe von Algorithmus-Implementierungen, die im Standardanbieter enthalten sind. Der FIPS-Provider enthält nur Algorithmus-Implementierungen, die dem Federal Information Processing Standard entsprechen, der Mindestsicherheitsanforderungen für kryptografische Module definiert. So enthält der Provider beispielsweise die Algorithmen AES, DSA, Triple DES und Elliptic Curve Digital Signature Algorithm (ECDSA).
  • Null. Dieser Provider ist in die libcrypto-Bibliothek integriert und enthält keine Algorithmen. Er wird in erster Linie verwendet, um zu verhindern, dass der Standard-Provider automatisch geladen wird, was bei der Verwendung von nicht standardmäßigen Bibliothekskontexten hilfreich sein kann. Ein Bibliothekskontext bestimmt den Bereich, in dem die Konfigurationsoptionen wirksam werden.

Um einen bestimmten Algorithmus in OpenSSL zu verwenden, muss mindestens ein Provider geladen sein, der eine Implementierung dieses Algorithmus enthält. Wenn kein Provider angegeben ist, lädt OpenSSL automatisch den Standard-Provider. Benutzer können auch Provider aus Drittquellen beziehen. Provider von Drittanbietern liegen in Form von ladbaren Modulen vor, die je nach Plattform typischerweise die Dateierweiterung .so oder .dll haben.

Diese Definition wurde zuletzt im Mai 2024 aktualisiert

Erfahren Sie mehr über Anwendungs- und Plattformsicherheit