Alle Beiträge von Don Matteo

lebt in Zürich, ist System Engineer MCP bei A-Enterprise GmbH. Mitglied des UNBLOG Network. Author und Blogger zu den Themen, Linux und Open Source. Tutorials für Windows, VMware, Synology, Fortinet.

cURL in der Praxis Anwenden

cURL – Client for URLs Programmbibliothek und Kommandozeilen-Programm in der Praxis

cURL ist ein Kommandozeilentool, es ermöglicht aus Shell- oder Bash-Scrips heraus Dateien über Protokolle wie http, https, ftp, gopher, sftp, ftps oder scp zu übertragen. Das Tool wurde 1997 von Daniel Stenberg entwickelt. Es ist bei Webseiten Entwickler sehr beliebt und steht unter der Open-Source MIT-Lizenz.

Unixoide Betriebssysteme beinhalten cURL im Standard. Bei vielen Embedded Linux Systeme ist cURL enthalten. So auch bei den NAS von Synology. Auch ist cURL bereits für Windows portiert und steht in der 64 bit und 32 bit Version zur Verfügung. PHP unterstützt die cURL-Funktionen mit der libcrul Bibliothek.

cURL bietet in der Praxis vielfältige Anwendungsmöglichkeiten, so lassen sich Websites fernsteuern und testen, Formulare automatisch ausfüllen. Informationen von Webseiten abfragen und in weitere Prozesse verarbeiten. In der Linux Shell-Console ist die Installation von wget nicht zwingend erforderlich. Dabei cURL umfangreiche Parameter und Optionen beinhaltet, und bereits vorinstalliert ist.

Im folgenden einige Beispiele aus der Praxis zur Anwendung von cURL in der Shell Console. So können Webseiten wie folgt abgerufen werden.

$ curl http://beispiel.com/seite.html

Damit wird die Datei seite.html gelesen und auf der Standardausgabe ausgegeben.

Möchten man die Datei unter dem Namen meineseite.html speichern, dient folgender Befehl:

$ curl -o meineseite.html http://beispiel.com/seite.html

curl Verbindungen mit IPv6

Verbindungen zu IPv6 Hosts werden wie folgt initialisiert.

$ curl "http://[2001:1234:1234:1::40]/"

  Die IPv6 Adresse muss in eckige Klammern eingebunden sein.

Meine Internet IP Adresse

Die eigene Internet IP Adresse mit cURL anzeigen.

$ curl echo.ipline.ch

Wenn sich eine URL geändert hat, wird oft die Webseite auf die neue URL-Adresse umgeleitet, häufig auch http zu https Umleitungen. Da cURL in der Standard-konfiguration Weiterleitungen nicht folgt, muss man in diesem Fall den Parameter -L übergeben.

curl mit self-signet Zertifikate

Bei Webseiten mit selbst ausgestelltem Zertifikat, oder veraltetem TLS v1.0 Verschlüsselungs-Algorithmus, muss der Parameter -k angewandt werden, um unsichere Verbindungen zu erlauben.

$ curl -k https://router.local

Wird für eine Website eine Benutzer-Authentifizierung über HTTP angefordert, lassen sich mit cURL Benutzername und Passwort übergeben, durch ein Doppelpunkt getrennt.

$ curl -u username:password http://www.beispiel-shop.com/

HTTP-Header mit cURL auslesen

Den HTTP-Header kann mit cURL ausgelesen werden.

$ curl --head http://www.google.com/

Mit dem Parameter –head weist man cURL an, die Ausgabe des HTTP-Header auf die Standardausgabe zu geben. Möchte man den Header in die Datei header.txt schreiben, könnte man das durch Pipe Operatoren in der Shell erreichen, oder ohne Unterstützung der Shell durch den Parameter –dump-header.

$ curl --dump-header headers.txt http://www.google.com/

Die aktuelle Version 7.63 unterstütz folgende Protokolle: DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, Telnet and TFTP. curl supports SSL certificates, HTTP POST, HTTP PUT, FTP.

FTP-Verbindungen mit cURL

Der FTP-Client von cURL kann auch mit FTP-Server interagieren.

$ curl ftp://username:password@ftp-server.com

cURL wird angewiesen den Index des Hauptverzeichnisses auszugeben. Benutzername und Passwort werden direkt mit der URL übergeben. Möchten man das Unterverzeichnis files auf dem FTP-Server auflisten, genügt es das Verzeichnis an die URL mitzugeben:

$ curl ftp://username:password@ftp-server.com/files/

Mit cURL ist auch ein Upload möglich, dazu übergibt man den Parameter -T gefolgt vom Dateinamen und ggf. dem Pfad.

$ curl -T meineseite.html -u username:password ftp://ftp-server.com/docs/deineseite.html

Durch diesen Befehl kopiert cURL die Datei meineseite.html auf den FTP-Server in das Verzeichnis docs unter den Dateinamen deineseite.html.

Bevorzugt sollte man SFTP verwenden, dabei wird die datei.txt über eine verschlüsselte Verbindung abgerufen.

$ curl --ftp-ssl ftp://ftp-server.com/datei.txt

Filetransfer über scp mit curl

Der Filetransfer geht auch über SCP, hier die datei.txt aus dem Verzeichnis docs übertragen.

$ curl -u username scp://server.com/docs/datei.txt

Privat Key Authentifizierung mit curl

Für automatisierte Abläufe über Scripts ist die Benutzeranmeldung nicht geeignet, hier lässt sich mit einem Privat Key authentifizieren.

$ curl -u username: --key ~/.ssh/id_rsa scp://server.com/~/datei.txt

Es wird die datei.txt aus dem Home (~) Verzeichnis des Servers übertragen.

cURL kann auch zur Verwendung mit Server Message Block (SMB) genutzt werden, so für MS LAN Manager und Samba.

$ curl -u "domain\username:passwd" smb://server.server.com/freigabe/datei.txt

Zugriff auf datei.txt über die Freigabe auf einem Samba Server.

cURL kann durch folgende Befehlszeile ein Shell Script herunterladen und gleich ausführen, der Befehl beginnt mit einem (.) Punkt.

$ . <(curl -s https://ipline.ch/echo/sysinfo.txt)

Dieses Kommando ist in der Linux Bash ausführbar, Es werden Systemkonfigurationen und Protokolle ausgelesen und in einer Datei zusammengestellt, und als Datei unter /tmp/sysinfo-*.html gespeichert.

Ein Blick in die Man Page man curl  kann sich lohnen, hier sind alle Kommandos mit Beispiele zur Anwendung von cURL aufgeführt.

curl(1)                                              Curl Manual                                              curl(1)

NAME
       curl - transfer a URL

SYNOPSIS
       curl [options] [URL...]

DESCRIPTION
       curl  is  a  tool to transfer data from or to a server, using one of the supported protocols (DICT, FILE, FTP,
       FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP,  SMTPS,  TELNET
       and TFTP).  The command is designed to work without user interaction.

       curl  offers  a  busload  of useful tricks like proxy support, user authentication, FTP upload, HTTP post, SSL
       connections, cookies, file transfer resume, Metalink, and more. As you will see below, the number of  features
       will make your head spin!

       curl is powered by libcurl for all transfer-related features. See libcurl(3) for details.

URL
       The URL syntax is protocol-dependent. You'll find a detailed description in RFC 3986.

       You can specify multiple URLs or parts of URLs by writing part sets within braces as in:

        http://site.{one,two,three}.com

       or you can get sequences of alphanumeric series by using [] as in:

        ftp://ftp.numericals.com/file[1-100].txt
        ftp://ftp.numericals.com/file[001-100].txt    (with leading zeros)
        ftp://ftp.letters.com/file[a-z].txt

cURL Online Manual
Quellen Link: curl.haxx.se

Let’s Encrypt Installation auf CentOS 7 mit Apache

Tutorial: Let’s Encrypt Certbot auf CentOS 7 für Apache 2.4

Let’s Encrypt ist eine Zertifizierungsstelle, die kostenlose X.509-Zertifikate für Transport Layer Security (TLS) anbietet. In diesem Tutorial wird gezeigt, wie man Let´s Encrypt SSL anhand des ACME Vorgang mit certbot durchführt, und Let’s Encrypt auf einem CentOS 7 Host mit Apache 2.4 Webserver implementiert.

  Vorausgesetzt wird hier, das der Apache-Webserver bereits installiert ist, die Domain als Apache VirtualHost konfiguriert ist, und die Domain im DNS auflösbar ist, mit einem A-Record in der Forward-Zone dieser Domain, oder für IPv6 ein Quad-A-Record für den Server eingetragen ist. Weiter muss für das ACME Challenge der Server über Port 80 erreichbar sein.

Zur installation auf dem CentOS host sind wir root.

$ su -
Password:
Last login: Tue Jan 15 06:25:52 CET 2019 on pts/0

Nach EPEL Repository hinzufügen wird Certbot für Apache installiert.

# yum -y install epel-release
# yum -y install mod_ssl python-certbot-apache

Nun den Apache-Webserver neu starten.

# systemctl restart httpd

Die Firewall für die Service Port 80 und 443 öffnen.

# firewall-cmd --add-service=http
# firewall-cmd --add-service=https
# firewall-cmd --runtime-to-permanent
# firewall-cmd --reload

Jetzt durch den certbot das SSL-Zertifikat generieren lassen.

# certbot --apache -d mydomain.com -d www.mydomain.com

  Die erste Domäne sollte die Basis Domain sein. In diesem Beispiel heißt sie mydomain.com, diese durch den tatsächlichen Domain-Name ersetzen.

Die Ausgabe des certbot sieht in etwa wie folgt aus.

# certbot --apache -d mydomain.com -d www.mydomain.com
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for mydomain.com
Waiting for verification...
Cleaning up challenges
Resetting dropped connection: acme-v02.api.letsencrypt.org
Created an SSL vhost at /etc/httpd/conf.d/mydomain-ssl.conf
Deploying Certificate to VirtualHost /etc/httpd/conf.d/mydomain-le-ssl.conf

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
Redirecting vhost in /etc/httpd/conf.d/mydomain.conf to ssl vhost in /etc/httpd/conf.d/mydomain-ssl.conf

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://mydomain.com

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=mydomain.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/mydomain.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/mydomain.com/privkey.pem
   Your cert will expire on 2019-04-14. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Abschließend kann die URL getestet werden.

$ curl -k https://mydomain.com

Die URL im Browser abrufen und bei SSL Labs verifizieren.

https://www.ssllabs.com/ssltest/analyze.html?d=mydomain.com
SSL Labs SSL Analyzing Report

Das Let’s Encrypt Zertifikat ist 90 Tage gültig.