OpenSSL: Einfache Verschlüsselung mit öffentlichen Schlüsseln. Verschlüsseln von Dateien mit OpenSSL Gewusst wie: Entschlüsseln einer Datei

Wie Sie in diesen Artikeln verstanden haben, gewährleistet nicht jedes Programm, das verspricht, Dateien zu verschlüsseln, die Sicherheit von Informationen. Bruce Schneier sagt: „Es gibt zwei Arten von Kryptographie: Kryptographie, die Ihre kleine Schwester daran hindert, Ihre Dateien zu lesen, und Kryptographie, die Ihre Regierungsonkel daran hindert, Ihre Dateien zu lesen.“ OpenSSL ist eine sehr beliebte Bibliothek, die von vielen für die Kryptographie verwendet wird - sowohl kostenpflichtig als auch kostenlose Programme... OpenSSL implementiert eine Vielzahl von Verschlüsselungsalgorithmen und -modi, sodass Sie die Wahl selbst treffen können und nicht der Programmentwickler.
Neben der Bibliothek selbst enthält das OpenSSL-Paket eine Reihe von Konsolendienstprogrammen. Dieser Artikel konzentriert sich auf das Verschlüsseln von Dateien mit symmetrischen Algorithmen.
Um eine Datei mit OpenSSL zu verschlüsseln, verwenden Sie den Befehl openssl enc. Dafür steht eine große Auswahl an Verschlüsselungsalgorithmen zur Verfügung, die OpenSSL unterstützt - Blowfish, Camellia, DES, RC2, RC4, RC5, IDEA, AES und andere. Neben verschiedenen Algorithmen stehen auch verschiedene Verschlüsselungsmodi zur Verfügung - ECB, CBC, CFB, OFB. Einige Verschlüsselungsmodi können mit unterschiedlichen Bittiefen verwendet werden.
Um die Liste der Optionen für den Befehl openssl enc anzuzeigen, geben Sie einfach Folgendes ein:

$ openssl enc --help
Optionen sind
-in Eingabedatei
-out Ausgabedatei
-Passwort-Quelle übergeben
-e verschlüsseln
-d entschlüsseln
-a / -base64 base64 codieren / decodieren, abhängig vom Verschlüsselungs-Flag
-k Passphrase ist das nächste Argument
-kfile Passphrase ist die erste Zeile des Dateiarguments
-md das nächste Argument ist das md, das verwendet wird, um einen Schlüssel zu erstellen
aus einer Passphrase. Einer von md2, md5, sha oder sha1
-S Salz in Hex ist das nächste Argument
-K / -iv Schlüssel / iv in Hex ist das nächste Argument
- iv / key ausdrucken (dann beenden, wenn -P)
-bufsize Puffergröße
-nopad deaktiviert die Standardblockauffüllung
-engine e verwendet Engine e, möglicherweise ein Hardwaregerät.
Verschlüsselungstypen
-aes-128-cbc -aes-128-cfb -aes-128-cfb1
-aes-128-cfb8 -aes-128-ecb -aes-128-ofb
-aes-192-cbc -aes-192-cfb -aes-192-cfb1
-aes-192-cfb8 -aes-192-ecb -aes-192-ofb
-aes-256-cbc -aes-256-cfb -aes-256-cfb1
-aes-256-cfb8 -aes-256-ecb -aes-256-ofb
-aes128 -aes192 -aes256
-bf -bf-cbc -bf-cfb
-bf-ecb -bf-ofb -blowfish
-camelia-128-cbc -camelia-128-cfb -camelia-128-cfb1
-camellia-128-cfb8 -camellia-128-ecb -camellia-128-ofb
-camelia-192-cbc -camelia-192-cfb -camelia-192-cfb1
-camellia-192-cfb8 -camellia-192-ecb -camellia-192-ofb
-camelia-256-cbc -camelia-256-cfb -camelia-256-cfb1
-camelia-256-cfb8 -camelia-256-ecb -camelia-256-ofb
-camellia128 -camellia192 -camellia256
-cast -cast-cbc -cast5-cbc
-cast5-cfb -cast5-ecb -cast5-ofb
-des -des-cbc -des-cfb
-des-cfb1 -des-cfb8 -des-ecb
-des-ede -des-ede-cbc -des-ede-cfb
-des-ede-ofb -des-ede3 -des-ede3-cbc
-des-ede3-cfb -des-ede3-cfb1 -des-ede3-cfb8
-des-ede3-ofb -des-ofb -des3
-desx -desx-cbc -idee
-idea-cbc -idea-cfb -idea-ecb
-idea-ofb -rc2 -rc2-40-cbc
-rc2-64-cbc -rc2-cbc -rc2-cfb
-rc2-ecb -rc2-ofb -rc4
-rc4-40 -rc5 -rc5-cbc
-rc5-cfb -rc5-ecb -rc5-ofb
-samen -samen-cbc -samen-cfb
-samen-ecb -samen-ofb

Nach dem Block Cipher Types werden die verfügbaren Algorithmen zusammen mit den Modi aufgelistet. Es gibt mehrere Varianten der DES-Verschlüsselung. Neben Standard-DES gibt es auch Triple 3DES (das ebenfalls in mehreren Varianten erhältlich ist) und DESX. Versuchen wir nun, etwas zu verschlüsseln.

$ openssl enc -e -in infile.txt -out outfile.bf_cbc -bf-cbc

Dieser Befehl bläst die CBC-verschlüsselte infile.txt und schreibt das Ergebnis in outfile.bf_cbc. Vor dem Verschlüsseln werden Sie zur Eingabe eines Verschlüsselungsschlüssels aufgefordert. Um diese Datei zu entschlüsseln, verwenden Sie den folgenden Befehl:

$ openssl enc -d -in outfile.bf_cbc -out dec_file.txt -bf-cbc

Bei der Aufforderung zur Schlüsseleingabe müssen Sie den Schlüssel eingeben, der bei der Verschlüsselung eingegeben wurde.
Wenn Sie Daten komprimieren möchten, müssen Sie dies aus offensichtlichen Gründen vor der Verschlüsselung tun.
Kommen wir nun zu den Optionen Befehlszeile... Die Option -e gibt an, dass die Datei verschlüsselt werden soll (diese Option ist standardmäßig aktiviert) und die Option -d wird entschlüsselt. Der Verschlüsselungsschlüssel kann beim Aufrufen von openssl enc mit der Option -k oder in einer Datei mit der Option -kfile eingegeben werden.
Mit der Option -nosalt können Sie die Verwendung von Salt für die Verschlüsselung deaktivieren (nicht empfohlen, da dies die Sicherheit der Verschlüsselung verringert).
Dieses Dienstprogramm kann auch in base64 und zurück konvertieren, aber diese Konvertierung ist nicht verschlüsselt. Lesen Sie mehr auf der Projektwebsite - http://www.openssl.org/docs/apps/enc.html. Bei Fragen bitte fragen.

PS Nachdem die Informationen verschlüsselt wurden, ist es notwendig, die Originaldatei korrekt zu löschen, damit keine Restinformationen verbleiben. Dazu können Sie jedes Programm verwenden, das die Gutman-Methode implementiert. Wenn Sie in der Befehlszeile ein Kennwort eingeben, stellen Sie außerdem sicher, dass es nicht im Verlauf gespeichert wurde und wenn es aus einer Datei gelesen wird, dass es vollständig gelöscht wurde.

Es gibt viele Situationen, in denen Sie eine bestimmte Datei oder einen bestimmten Ordner verschlüsseln müssen. Wenn beispielsweise Daten über offene Kanäle übertragen oder auf externe Medien... Viele (einschließlich mir) verwenden truecrypt, aber der Hauptzweck dieses Programms besteht darin, mit verschlüsselten Partitionen zu arbeiten, daher ist es in diesem Fall nicht sehr gut.

Für solche Aufgaben ist OpenSSL durchaus geeignet - eine zuverlässige plattformübergreifende Lösung. OpenSSL unterstützt verschiedene Verschlüsselungsalgorithmen und ist in vielen standardmäßig installiert Betriebssysteme, und die Installation auf dem Rest wird nicht schwierig sein.

Unter habrakat - die Grundlagen der Verwendung symmetrischer und asymmetrischer Verschlüsselung in OpenSSL sowie einige Skripte, die die asymmetrische Verschlüsselung mit einem einmaligen Schlüssel vereinfachen.

Der einfachste Weg, Ihre Daten zu schützen mit mit OpenSSL- symmetrische Verschlüsselung. Die folgenden Befehle verschlüsseln und entschlüsseln die Datei files.zip mithilfe von AES mit einem 256-Bit-Schlüssel:

Openssl enc -aes-256-cbc -salt -in Dokumente.zip -out Dokumente.enc
openssl enc -d -aes-256-cbc -in dokumente.enc -out dokumente.zip

Das Problem bei diesen Befehlen kann darin bestehen, dass sie ein Kennwort erfordern. Es gibt Situationen, in denen dies unerwünscht ist. Zum Beispiel automatische Sicherung / Verschlüsselung von Daten nach einem Zeitplan oder wenn die Daten von einer Person verschlüsselt und von einer anderen entschlüsselt werden.

Für solche Fälle wurde die Verschlüsselung mit öffentlichen Schlüsseln erfunden. Im Allgemeinen müssen Sie ein offenes und Privat Schlüssel und. Der erste Befehl generiert den privaten Schlüssel private.pem, der zweite den öffentlichen Schlüssel public.pem:

Openssl genrsa -out private.pem -aes256 2048
openssl rsa -in private.pem -pubout -out public.pem

Als Ergebnis erhalten Sie ein 2048-Bit-RSA-Schlüsselpaar. Leider ist im RSA-System die Größe der verschlüsselten Daten durch die Größe des Schlüssels begrenzt, sodass Sie nicht mehr als 2 KB Daten verschlüsseln können. Es gibt einen Weg, dies zu umgehen: Die Informationen werden zunächst mit einem symmetrischen Algorithmus (wie dem oben verwendeten) unter Verwendung eines Einmalschlüssels verschlüsselt. Dieser Einmalschlüssel wird dann mit dem öffentlichen Schlüssel verschlüsselt. Während der Entschlüsselung wird der Einmalschlüssel privat entschlüsselt. Mehr dazu wurde schon sehr gut geschrieben.

Das folgende Skript hilft bei der Automatisierung der Verschlüsselung, an dessen Ausgabe Sie einmalig einen Schlüssel und Daten (encrypt.sh) in verschlüsselter Form erhalten:

DATEINAME = "$ 1"
PUBLICKEY = "$ 2"
SITZUNGSSCHLÜSSEL = "$ 3"
ERGEBNIS = "$ 4"

# Generiere den zufälligen symmetrischen Schlüssel
PASSIEREN = 30
wenn [-c / dev / urandom]; dann
SCHLÜSSEL = `head -c 30 / dev / urandom | openssl enc -base64`
anders
SCHLÜSSEL = `openssl rand -base64 30`
fi
SCHLÜSSEL exportieren

# Verschlüsseln Sie den symmetrischen Schlüssel mit dem öffentlichen Schlüssel
openssl rsautl -encrypt -inkey "$ PUBLICKEY" -out "$ SESSIONKEY" -pubin<$-TASTE
EOF

# Datei verschlüsseln
openssl enc -aes-256-cbc -pass env: KEY -in "$ FILENAME" -out "$ RESULT"

Der folgende Befehl verwendet den öffentlichen Schlüssel public.pem, um die Datei files.zip zu verschlüsseln. Es generiert einen verschlüsselten Einmalschlüssel session.key und verschlüsselte Datendokumente.enc:

./encrypt.sh Dokumente.zip public.pem session.key Dokumente.enc

Entschlüsselungsskript (decrypt.sh):

PRIVATESCHLÜSSEL = "$ 1"
SITZUNGSSCHLÜSSEL = "$ 2"
VERSCHLÜSSELT = "$ 3"
DECRYPTED = "$ 4"

# Entschlüsseln Sie den symmetrischen Schlüssel mit dem privaten Schlüssel
KEY = `openssl rsautl -decrypt -inkey" $ PRIVATEKEY "-in" $ SESSIONKEY "`
SCHLÜSSEL exportieren

# Entschlüsseln Sie die Datei
openssl enc -aes-256-cbc -d -pass env: KEY -in "$ ENCRYPTED" -out "$ DECRYPTED"

Der Entschlüsselungsbefehl verwendet den privaten Schlüssel private.pem und den einmaligen Schlüssel session.key, um die Datei document.enc zu entschlüsseln. Es wird eine Datei files.zip generiert:

./decrypt.sh private.pem session.key Dokumente.enc Dokumente.zip

Wie Sie sehen, kann die Verschlüsselung mit öffentlichen Schlüsseln fast so einfach sein wie die symmetrische Verschlüsselung. Aber es gibt einen noch einfacheren Weg. Der SbF₅-Blog hat mich dazu veranlasst, diesen Beitrag zu schreiben. Sein Autor (der in der Bash zweifellos ausgefeilter ist als ich) hat ein Skript geschrieben, das einen Ordner archiviert, mit einem öffentlichen Schlüssel verschlüsselt und ein weiteres Skript generiert, das alles enthält, was Sie brauchen: einen einmaligen Schlüssel, Daten und die eigentlichen Entschlüsselungsbefehle. Darüber hinaus kann das Skript ein RSA-Schlüsselpaar für Sie generieren:

./encrypt-file.sh -keys public.pem private.pem
./encrypt-file.sh Ordner public.pem> decrypt-folder.sh
chmod + x decrypt-folder.sh
./decrypt-folder.sh private.pem> folder.tar

In diesem Beispiel haben wir zuerst ein Schlüsselpaar generiert. Danach wurde der Ordner Ordner in das Skript decrypt-folder.sh verschlüsselt und dann in das Archiv folder.tar entschlüsselt. Ein möglicher Nachteil dieser Methode besteht darin, dass die Daten in decrypt-folder.sh im BASE64-Format gespeichert werden und daher ihre Größe zunimmt.

UPD In den Blog Informationssicherheit verschoben.

Es gibt viele Situationen, in denen Sie eine bestimmte Datei oder einen bestimmten Ordner verschlüsseln müssen. Zum Beispiel, wenn die Daten über offene Kanäle übertragen oder auf einem externen Medium gespeichert werden. Viele (einschließlich mir) verwenden truecrypt, aber der Hauptzweck dieses Programms besteht darin, mit verschlüsselten Partitionen zu arbeiten, daher ist es in diesem Fall nicht sehr gut.

Für solche Aufgaben ist OpenSSL durchaus geeignet - eine zuverlässige plattformübergreifende Lösung. OpenSSL unterstützt verschiedene Verschlüsselungsalgorithmen und wird standardmäßig auf vielen Betriebssystemen installiert, und die Installation auf anderen ist einfach.

Unter habrakat - die Grundlagen der Verwendung symmetrischer und asymmetrischer Verschlüsselung in OpenSSL sowie einige Skripte, die die asymmetrische Verschlüsselung mit einem einmaligen Schlüssel vereinfachen.

Der einfachste Weg, Ihre Daten mit OpenSSL zu schützen, ist die symmetrische Verschlüsselung. Die folgenden Befehle verschlüsseln und entschlüsseln die Datei files.zip mithilfe von AES mit einem 256-Bit-Schlüssel:

Openssl enc -aes-256-cbc -salt -in Dokumente.zip -out Dokumente.enc
openssl enc -d -aes-256-cbc -in dokumente.enc -out dokumente.zip

Das Problem bei diesen Befehlen kann darin bestehen, dass sie ein Kennwort erfordern. Es gibt Situationen, in denen dies unerwünscht ist. Zum Beispiel automatische Sicherung / Verschlüsselung von Daten nach einem Zeitplan oder wenn die Daten von einer Person verschlüsselt und von einer anderen entschlüsselt werden.

Für solche Fälle wurde die Verschlüsselung mit öffentlichen Schlüsseln erfunden. Im Allgemeinen müssen Sie öffentliche und private Schlüssel erstellen. Der erste Befehl generiert den privaten Schlüssel private.pem, der zweite den öffentlichen Schlüssel public.pem:

Openssl genrsa -out private.pem -aes256 2048
openssl rsa -in private.pem -pubout -out public.pem

Als Ergebnis erhalten Sie ein 2048-Bit-RSA-Schlüsselpaar. Leider ist die Größe der verschlüsselten Daten im RSA-System durch die Größe des Schlüssels begrenzt, sodass Sie nicht mehr als 2 KB Daten verschlüsseln können. Es gibt einen Weg, dies zu umgehen: Die Informationen werden zunächst mit einem symmetrischen Algorithmus (wie dem oben verwendeten) unter Verwendung eines Einmalschlüssels verschlüsselt. Dieser Einmalschlüssel wird dann mit dem öffentlichen Schlüssel verschlüsselt. Während der Entschlüsselung wird der Einmalschlüssel privat entschlüsselt. Näheres dazu wurde bereits sehr gut im Artikel über Habré geschrieben.

Das folgende Skript hilft bei der Automatisierung der Verschlüsselung, an dessen Ausgabe Sie einmalig einen Schlüssel und Daten (encrypt.sh) in verschlüsselter Form erhalten:

DATEINAME = "$ 1"
PUBLICKEY = "$ 2"
SITZUNGSSCHLÜSSEL = "$ 3"
ERGEBNIS = "$ 4"

# Generiere den zufälligen symmetrischen Schlüssel
PASSIEREN = 30
wenn [-c / dev / urandom]; dann
SCHLÜSSEL = `head -c 30 / dev / urandom | openssl enc -base64`
anders
SCHLÜSSEL = `openssl rand -base64 30`
fi
SCHLÜSSEL exportieren

# Verschlüsseln Sie den symmetrischen Schlüssel mit dem öffentlichen Schlüssel
openssl rsautl -encrypt -inkey "$ PUBLICKEY" -out "$ SESSIONKEY" -pubin<$-TASTE
EOF

# Datei verschlüsseln
openssl enc -aes-256-cbc -pass env: KEY -in "$ FILENAME" -out "$ RESULT"

Der folgende Befehl verwendet den öffentlichen Schlüssel public.pem, um die Datei files.zip zu verschlüsseln. Es generiert einen verschlüsselten Einmalschlüssel session.key und verschlüsselte Datendokumente.enc:

./encrypt.sh Dokumente.zip public.pem session.key Dokumente.enc

Entschlüsselungsskript (decrypt.sh):

PRIVATESCHLÜSSEL = "$ 1"
SITZUNGSSCHLÜSSEL = "$ 2"
VERSCHLÜSSELT = "$ 3"
DECRYPTED = "$ 4"

# Entschlüsseln Sie den symmetrischen Schlüssel mit dem privaten Schlüssel
KEY = `openssl rsautl -decrypt -inkey" $ PRIVATEKEY "-in" $ SESSIONKEY "`
SCHLÜSSEL exportieren

# Entschlüsseln Sie die Datei
openssl enc -aes-256-cbc -d -pass env: KEY -in "$ ENCRYPTED" -out "$ DECRYPTED"

Der Entschlüsselungsbefehl verwendet den privaten Schlüssel private.pem und den einmaligen Schlüssel session.key, um die Datei document.enc zu entschlüsseln. Es wird eine Datei files.zip generiert:

./decrypt.sh private.pem session.key Dokumente.enc Dokumente.zip

Wie Sie sehen, kann die Verschlüsselung mit öffentlichen Schlüsseln fast so einfach sein wie die symmetrische Verschlüsselung. Aber es gibt einen noch einfacheren Weg. Der SbF₅-Blog hat mich dazu veranlasst, diesen Beitrag zu schreiben. Sein Autor (der in der Bash zweifellos ausgefeilter ist als ich) hat ein Skript geschrieben, das einen Ordner archiviert, mit einem öffentlichen Schlüssel verschlüsselt und ein weiteres Skript generiert, das alles enthält, was Sie brauchen: einen einmaligen Schlüssel, Daten und die eigentlichen Entschlüsselungsbefehle. Darüber hinaus kann das Skript ein RSA-Schlüsselpaar für Sie generieren:

./encrypt-file.sh -keys public.pem private.pem
./encrypt-file.sh Ordner public.pem> decrypt-folder.sh
chmod + x decrypt-folder.sh
./decrypt-folder.sh private.pem> folder.tar

In diesem Beispiel haben wir zuerst ein Schlüsselpaar generiert. Danach wurde der Ordner Ordner in das Skript decrypt-folder.sh verschlüsselt und dann in das Archiv folder.tar entschlüsselt. Ein möglicher Nachteil dieser Methode besteht darin, dass die Daten in decrypt-folder.sh im BASE64-Format gespeichert werden und daher ihre Größe zunimmt.

UPD In den Blog Informationssicherheit verschoben.

OpenSSL Ist ein leistungsstarker Satz von Tools, mit denen Sie Verschlüsselung von Dateien und Nachrichten.

Wenn Sie das gleiche Passwort wie für . verwenden möchten Klartextverschlüsselung, und für seine nachfolgenden Entschlüsselung, dann musst du verwenden symmetrischer Verschlüsselungsalgorithmus.

In diesem Artikel erfahren Sie, wie Dateien und Nachrichten ver- und entschlüsseln mit einem Kennwort von der Befehlszeile unter Linux mit OpenSSL.

Gewusst wie: Verschlüsseln Sie die Datei

$ openssl enc -aes-256-cbc -salt -in Datei.txt-aus file.txt.enc

256-Bit-AES ist ein kryptografischer Algorithmus, der von der US-Regierung verwendet wird, um Informationen auf ihrer geheimsten Ebene zu verschlüsseln.

Möglichkeit -Salz(Salz) sollte verwendet werden IMMER wenn der geheime Schlüssel aus einem Passwort generiert wird.

Ohne die Option zu verwenden -Salz, ist es möglich, einen hocheffektiven Wörterbuchangriff durchzuführen, der zur Offenlegung verschlüsselter Daten führt. Der Grund dafür ist, dass ohne das Hinzufügen des „Salzes“ dasselbe Passwort immer den gleichen geheimen Schlüssel generiert.

Bei Verwendung von Salt sind die ersten 8 Byte für Salt reserviert. Es wird zufällig generiert, wenn die Datei verschlüsselt ist, und wird während der Entschlüsselung aus der verschlüsselten Datei gelesen.

Gewusst wie: Entschlüsseln Sie die Datei

$ openssl enc -aes-256-cbc -D-in file.txt.enc-aus Datei.txt

Base64-Kodierung und -Dekodierung

Base64-Codierung, is Standardmethode zum Konvertieren von 8-Bit-Binärinformationen in eine begrenzte Untermenge von ASCII-Zeichen für den sicheren Transport durch E-Mail-Systeme und andere Systeme, die das 8-Bit-Format nicht unterstützen.

Standardmäßig wird die verschlüsselte Datei im Binärformat erstellt. Wenn Sie es per senden möchten Email, IRC usw., müssen Sie es Base64-kodiert speichern. Um eine Base64-codierte Datei zu verschlüsseln, fügen Sie die Option -ein:

$ openssl enc -aes-256-cbc -salt -ein-in Datei.txt-aus file.txt.enc

Optionen Beschreibung
-ein Teilt OpenSSL mit, dass die verschlüsselten Daten Base64-codiert sind.

Auch Option -ein, muss bei der Entschlüsselung angegeben werden:

$ openssl enc -aes-256-cbc -D -ein-in file.txt.enc-aus Datei.txt

Verschlüsseln / Entschlüsseln ohne Passwortabfrage

Da das Passwort sichtbar gemacht wird, sollte diese Methode nur verwendet werden, wenn Sicherheit ist nicht wichtig.

Standardmäßig wird der Benutzer interaktiv zur Eingabe eines Kennworts aufgefordert.

Beim Schreiben BASH-Skript Eventuell möchten Sie das Passwort nicht interaktiv mit der Option . eingeben -k.

Für solche Fälle wurde die Verschlüsselung mit öffentlichen Schlüsseln erfunden.

Verschlüsseln Sie die Datei mit dem angegebenen Passwort:

$ openssl enc -aes-256-cbc -salt -in file.txt -out file.txt.enc -k PASS

Entschlüsseln Sie die Datei mit dem bereitgestellten Passwort:

$ openssl enc -aes-256-cbc -d -in file.txt.enc -out file.txt -k PASS

Tools wie OpenSSH und OpenSSL bedürfen keiner Einführung. Sie sind die ewigen Freunde jedes Systemadministrators und vieler fortgeschrittener Benutzer. Allerdings weiß nicht jeder um ihre wahre Macht und Fähigkeiten, die sich im Laufe der Jahre der Entwicklung angesammelt haben. Heute werden Sie viele interessante Möglichkeiten entdecken, diese Programme zu verwenden.

OpenSSH

OpenSSH, das undichte Telnet ersetzt, steht immer noch an erster Stelle unter den Systemen Fernbedienung dank seiner Sicherheit und Benutzerfreundlichkeit. Jeder ist in der Lage, es zu verstehen, selbst die am meisten verchromten Teekannen, aber die überwältigende Mehrheit der Benutzer nutzt das Minimum seiner Fähigkeiten. Lassen Sie uns die Geschichten über Schlüssel, Portweiterleitung, Proxying und andere nützliche, aber bekannte Tricks überspringen und betrachten wir interessante und nicht sehr gebräuchliche Möglichkeiten zur Verwendung dieses Tools.

DIE INFO

MIT vollständige Liste OpenSSL-Befehle können mit angezeigt werden folgende Parameter: list-standart-commands, list-message-digest-commands, list-chiffre-commands.

Trick Nummer eins sind also mehrere Verbindungen. OpenSSH kann viele gleichzeitige Verbindungen zum selben Computer verarbeiten. Normalerweise führen Benutzer einfach einen Befehl aus und warten, bis er abgeschlossen ist, um den nächsten auszuführen. Glücklicherweise kann dieses Problem leicht umgangen werden, indem eine Verbindung in viele Sitzungen aufgeteilt wird. Fügen Sie einfach die folgenden Zeilen zur ssh-Konfiguration hinzu (~ / .ssh / config):

ControlMaster auto ControlPath ~ / .ssh / mux_% h_% p_% r

Sie können so viele Verbindungen zu demselben Server herstellen, wie Sie für richtig halten, ohne Zeit für die erneute Authentifizierung aufwenden zu müssen.


Trick Nummer zwei ist das Proxying von Verbindungen. Nehmen wir an, Sie können keine direkte Verbindung zum SSH-Server herstellen, sondern können dafür einen anderen Host verwenden, auf den Sie ebenfalls SSH-Zugriff haben. Fügen Sie Ihrer Konfiguration die folgenden Zeilen hinzu:

ForwardAgent ja Host host HostName host.com ProxyCommand ssh proxy-host.com \ netcat -q 600% h% p

Der Befehl ssh host stellt über den Server proxy-host.com eine Verbindung zum Server host.com her.

Trick Nummer drei geht über die HTTP-Isolation hinaus. Viele Organisationen reduzieren nicht nur den Verkehr, den sie nicht mögen, sondern zwingen die Benutzer auch dazu, nur über das HTTP-Protokoll online zu gehen. Diese Ungerechtigkeit lässt sich leicht mit corkscrew (www.agroman.net/corkscrew/) umgehen, das den SSH-Verkehr über HTTP tunneln kann. Installieren Sie es einfach auf Ihrem Computer und fügen Sie der Konfiguration die folgenden Zeilen hinzu (wobei proxy.com und 80 die externe HTTP-Proxy-Adresse und der Port sind):

Host * ProxyCommand Korkenzieher proxy.com 80% h% p

Alle Verbindungen gehen nun über den angegebenen HTTP-Proxy.

Trick Nummer vier - Netzwerkbandbreitentest. Um die Verbindungsgeschwindigkeit zu testen, muss keine spezielle Software installiert werden, das Dienstprogramm pv und das gute alte SSH reichen aus:

$ sudo apt-get install pv $ ja | pv | ssh host.com "cat> / dev / null"

Trick Nummer fünf - Analyse des Netzwerkverkehrs aus der Ferne. Fast jedes UNIX-System hat einen tcpdump-Netzwerk-Sniffer, aber das Lesen seiner Protokolle ist ziemlich mühsam. OpenSSH-Funktionen vereinfachen die Verkehrsanalyse:

$ ssh [E-Mail geschützt] tcpdump -w - "Port! 22" \ | Wireshark -k -i -

Jetzt wird der gesamte Datenverkehr, der über host.com läuft, im Wireshark-Grafikfenster auf Ihrem Computer angezeigt.

Trick Nummer sechs - Dateien mit niedriger Geschwindigkeit übertragen. Manchmal ist es notwendig, eine große Anzahl von Dateien auf einen Remote-Computer zu übertragen, aber tun Sie dies, damit der Prozess das Netzwerk nicht stört. In diesem Fall können Sie das cstream-Tool verwenden:

$ sudo apt-get install cstream $ tar -cj / backup | cstream -t 512k | \ ssh-Host "tar -xj -C / backup"

Trick Nummer sieben - SSH-Sitzung immer öffnen. Laptop-Benutzer, deren Verbindung zum Netzwerk möglicherweise nicht dauerhaft ist, müssen den SSH-Client jedes Mal neu starten, wenn das Netzwerk erscheint, und ihn beenden, wenn die Verbindung verloren geht. Dies kann durch die Verwendung des Autossh-Tools vermieden werden, das die Illusion einer permanenten Verbindung zum Server aufrechterhält und die Verbindung wiederherstellt, wenn das Netzwerk verfügbar ist:

$ sudo apt-get install autossh $ autossh -M50000 -t server.example.com \ "screen -raAd mysession"

Trick Nummer acht – Ausführen eines Befehls auf mehreren Servern gleichzeitig. Kommentare sind überflüssig:

$ echo "uptime" | pinkeln "ssh host1" "ssh host2" \ "ssh host3"

Trick Nummer neun - Vergleich von Dateien aus der Ferne. Es ist oft erforderlich, die lokale und die entfernte Version einer Konfiguration zu vergleichen, aber das Hin- und Herkopieren von Dateien ist umständlich und zeitaufwändig. In diesem Fall können Sie den folgenden Befehl verwenden:

$ ssh [E-Mail geschützt] cat / path / to / remote / file | \ diff / path / to / local / file -

Das gleiche kann für zwei Dateien gemacht werden, die sich auf verschiedenen Servern befinden:

$ unterschied<(ssh host1 cat /etc/apt/sources.list) \ <(ssh host2 cat /etc/apt/sources.list)

cpu0: RNG AES

Benchmark-Ergebnisse von kryptografischen Tools, die in die CPU der VIA Eden-Plattform integriert sind (Prozessoranweisungen für die Arbeit mit dem blocksymmetrischen Verschlüsselungsalgorithmus AES):

% openssl speed -elapsed -evp aes-256-cbc type 16 Bytes 64 Bytes 256 Bytes 1024 Bytes 8192 Bytes aes-256-cbc 21780.33k79591.78k 198578.08k 317102.05k 383371.05k

Trick Nummer 10 - Protokolle von mehreren Maschinen gleichzeitig anzeigen. Mit Multitail und SSH können Sie Protokolle von zwei Servern gleichzeitig problemlos anzeigen:

$ sudo apt-get install multitail $ multitail -l "ssh host1" tail -f \ /var/log/apache2/error.log "" -l "ssh host2 \" tail -f / var / log / apache2 / error. Protokoll ""

Trick Nummer 11 - Kopieren von Dateien von einem Remote-Computer auf einen anderen über den lokalen. Wenn zwei Remote-Computer keine Kommunikation miteinander herstellen können, können Dateien zwischen ihnen mithilfe Ihres Computers als Zwischenverbindung übertragen werden:

$ ssh [E-Mail geschützt]"cd / Verzeichnis && tar -cf -." | \ ssh [E-Mail geschützt]"cd / Verzeichnis && tar -xf -"

Trick Nummer 12 - Kopieren der Ausgabe eines Remote-Befehls in die Zwischenablage. Es ist oft notwendig, die Ausgabe eines Remote-Befehls in die Zwischenablage zu kopieren, um sie in eine E-Mail, einen Forenbeitrag usw. einzufügen. Am einfachsten geht dies mit dem Dienstprogramm xclip:

$ ssh [E-Mail geschützt] cat /file.txt | xclip

Trick Nummer 13 - Zeitsynchronisation mit SSH. Wenn das Gerät keinen Zugriff auf den NTP-Server hat oder der NTP-Client nicht darauf installiert ist, können Sie die Uhrzeit zwischen den Geräten wie folgt synchronisieren:

# date --set = "$ (ssh [E-Mail geschützt] Datum) "

Trick Nummer 14 – Installieren von Paketen von einem Remote-Computer auf einem lokalen Computer. Es ist oft notwendig, zwei Maschinen zu synchronisieren, damit auf ihnen die gleichen Pakete installiert sind. Dies ist mit Standardmethoden schwierig, aber mit SSH ist es so einfach wie das Schälen von Birnen:

# ssh remotehost "dpkg --get-selections" | \ dpkg --set-selections && dselect install

Trick # 15 - Remote-Screenshot. Es ist sehr einfach, ein Image des X-Servers von einem Remote-Rechner mit dem Standard-Grafikpaket ImageMagick zu erhalten:

# ssh [E-Mail geschützt]"DISPLAY =: 0.0 import -window \ root -format png -" | anzeige -format png -

Trick Nummer 16 - Beschleunigen Sie die Datenübertragung. Befinden sich die Maschinen, zu denen die Verbindung hergestellt wird, in einem bekannten sicheren Netzwerk (z. B. einem Büro oder zu Hause), kann die SSH-Datenübertragung durch Verwendung eines weniger starken Verschlüsselungsalgorithmus etwas beschleunigt werden. Fügen Sie dazu die folgenden Zeilen in die Konfigurationsdatei ein:

Host host.com-Verschlüsselungen arcfour256 MACs [E-Mail geschützt]

Trick Nummer 17 – Ausgeben von Audio von einem Remote-Computer an einen lokalen Computer. Manchmal möchten Sie zusammen mit dem Bild des Desktops des Remote-Rechners auch Ton hören. Dies geschieht mit dem trivialen dd:

$ dd if = / dev / dsp | ssh -c arcfour -C \ [E-Mail geschützt] dd von = / dev / dsp

Trick Nummer 18 - Ausführen eines lokalen Skripts auf einem Remote-Computer. Oft müssen Sie ein Skript auf einem Remote-Computer ausführen, aber es ist nicht erforderlich, es dorthin zu kopieren. Führen Sie einfach den folgenden einfachen Befehl aus:

$ ssh -T [E-Mail geschützt] < script.sh

OpenSSL

OpenSSL ist ein Datenschutz- und Zertifizierungssystem, das als Reaktion auf die Schaffung des Secure Socket Layer (SSL) von Netscape entwickelt wurde. Entgegen der landläufigen Meinung ist OpenSSL keineswegs ein Werkzeug zur Implementierung des SSL-Protokolls und kann eine Vielzahl von Funktionen ausführen, einschließlich der Verwaltung von Schlüsseln und Zertifikaten, der Berechnung von Hashes usw. Hier ist nur eine unvollständige Liste der Fähigkeiten dieses kryptografischen Harvesters :

  • Erstellen und Verwalten von RSA- und DSA-Schlüsseln (rsa-, dsa-, dsaparam-Befehle);
  • Erstellung von Zertifikaten im x509-Format, Erstellung von Zertifizierungsanträgen, Wiederherstellung (Befehle x509, req, verify, ca, crl, pks12, pks7);
  • symmetrische und asymmetrische Datenverschlüsselung (enc, rsautl-Befehle);
  • Hash-Berechnung (dgst-Befehl);
  • arbeiten mit S/MIME (s/mime-Befehl).

OpenSSL kann auch verwendet werden, um SSL-Server und -Clients mit speziellen Befehlen zu überprüfen s Kunde / s Server und um die Geschwindigkeit verschiedener Algorithmen (Befehlsgeschwindigkeit) zu testen.

Wir haben mehr als einmal über die Arbeit mit dem OpenSSL-Paket geschrieben, daher werden wir nicht auf Standardbeispiele für seine Verwendung wie das Erstellen von Hashes und Zertifikaten eingehen, sondern sofort zu ernsthafteren Tricks übergehen.


Zeit ist Geld

Eine der interessanten Eigenschaften von OpenSSL ist, dass es die verwendeten Algorithmen und die Geschwindigkeit beim Aufbau einer SSL-Verbindung vergleichen kann. Dafür ist der Standardbefehl s_time vorgesehen. Um die Geschwindigkeit beim Aufbau einer SSL-Verbindung abzuschätzen, müssen Sie sie auf den Befehl openssl anwenden:

$ openssl s_time -connect gmail.com:443 \ -www /test.html -neue 103 Verbindungen in 0,75s; 137,33 Verbindungen / Benutzersek., gelesene Bytes 42436 103 Verbindungen in 31 realen Sekunden, 412 gelesene Bytes pro Verbindung

Das gleiche kann mit den robustesten Algorithmen gemacht werden:

$ openssl s_time -ssl3 -chiffre HIGH \ -connect gmail.com:443 -www / -neu 99 Verbindungen in 0,73s; 135,62 Verbindungen / Benutzersek., gelesene Bytes 40 788 99 Verbindungen in 31 realen Sekunden, 412 gelesene Bytes pro Verbindung

Mit diesen beiden Befehlen können Sie den maximalen Durchsatz des SSL-Servers bestimmen. Eine noch interessantere Möglichkeit besteht jedoch darin, alle unterstützten Algorithmen zu testen. Dazu müssen wir auf Skripte zurückgreifen:

IFS = ":" für c in $ (openssl-Chiffren -ssl3 RSA); do echo $ c openssl s_time -connect host: 443 -www / -new \ -time 10 -chiffre $ c 2> & 1 | grep bytes echo fertig

Mit diesem Befehl können Sie die Geschwindigkeit beim Aufbau einer SSL-Verbindung mit verschiedenen Verschlüsselungsalgorithmen messen, die beispielsweise zum Tunen eines SSL-Servers verwendet werden können. Wenn Sie noch keinen SSL-Server haben, können Sie ihn ganz einfach mit OpenSSL selbst emulieren. Starten Sie den OpenSSL-Server auf dem Servercomputer: