Gebräuchliche OpenSSL Befehle

Allgmeine OpenSSL Befehle

Diese Kommandos dienen zum erstellen von CSRs, Zetifikaten, PrivateKeys und anderen verschiedenen Dingen.

PrivateKey erstellen

openssl genrsa -out example.com.key 4096

Zertifikat erstellen

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt

CSR erstellen

openssl req -out CSR.csr -key privateKey.key -new

Siehe dazu auch: SSL CSR erstellen für weitere Optionen, wie z.B: ein CSR für ein SAN Zertifikat.

CSR aus bestehendem Zertifikat erstellen

Hat man keinen CSR zum ursprünglich angelegten Zertifikat mehr, lässt sich das einfach aus dem bisherigen Zertifikat und Key erstellen:

openssl x509 -x509toreq -in certificate.crt -signkey privateKey.key -out $CSR.csr 

Neuer PrivateKey aus altem erstellen

openssl rsa -in privateKey.pem -out newPrivateKey.pem

Neuer CSR inklusive key erstellen

openssl req -new -newkey rsa:4096 -nodes -keyout www.example.com.key -out www.example.com.csr -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com"

Neues selbst signiertes Zertifikat inklusive key erstellen

openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" -keyout www.example.com.key -out www.example.com.crt

Überprüfen mit OpenSSL

Zertifikate, CSRs oder PrivateKeys überpüfen:

Certificate Request (CSR) prüfen

openssl req -text -noout -verify -in CSR.csr

PrivateKey prüfen

openssl rsa -check -in privateKey.key

Zertifikat anschauen

openssl x509 -text -noout -in certificate.crt

Einzelne Felder aus dem Zertifikat ausgeben

openssl x509 -enddate -noout -in certificate.crt
openssl x509 -subject -noout -in certificate.crt

PKCs12 file prüfen

openssl pkcs12 -info -in keyStore.p12

Debuggen mit OpenSSL

Falls man einen Fehler bekommt wie: „private doesn’t match the certificate“ oder einem installierten Zertifikat wird nicht vertraut, dann kann man das mit diesem Kommandos herausfinden.

Prüfen ob ein Zetifikat (.crt) zu einem Schlüssel (.key) passt

openssl x509 -noout -modulus -in certificate.crt | openssl md5; openssl rsa -noout -modulus -in privateKey.key | openssl md5; openssl req -noout -modulus -in CSR.csr | openssl md5

(alle md5-summen müssen gleich sein)

Mit der Website verbinden und Zertifikat sehen

openssl s_client -connect www.paypal.com:443

Hinweis: Bei der Verwendung von name based virtualhosts mittels SNI muss zusätzlich noch der Parameter -servername angefügt werden:

openssl s_client -servername www.paypal.com -connect www.paypal.com:443

Konvertieren mit OpenSSL

Mit den folgenden Kommandos kann man Zertifikate und Schlüssel in andere Format konvertieren um diese mit spezifischen Server- und Software- typen kompatibel zu machen.
z.B. eine normale PEM Datei, welche mit apache funktionieren würde in eine PFX (PKCS#12) Datei umwandeln und mit Tomcat oder IIS zu benutzen.

DER nach PEM

openssl x509 -inform der -in certificate.cer -out certificate.pem

PEM nach DER

openssl x509 -outform der -in certificate.pem -out certificate.der

PKCS12/PFX (.p12/.pfx) nach PEM

openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes

(You can add -nocerts to only output the private key or add -nokeys to only output the certificates)

PEM nach PKCS12/PFX (.p12/.pfx)

openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt

Quelle: SSLShopper: The Most Common OpenSSL Commands

CA erstellen und mit dieser ein Zertifikat erstellen

Mit den nachfolgenden Befehlen kann man schnell eine CA erstellen udn damit ein Zertifikat signieren:

# Key erstellen
openssl genrsa -out ca.key 2048
# Root-CA Zertifikat mit diesem key erstellen
openssl req -x509 -new -nodes -key ca.key -sha256 -days 1024 -out ca.crt

## Zertifikat für domain: "example.org" erstellen
# Key für cert erstellen:
openssl genrsa -out example.org.key 2048
# CSR mit diesem key erstellen
openssl req -new -key example.org.key -out example.org.csr
# Zertifikat erstellen und mit der Root-CA signieren:
openssl x509 -req -in example.org.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out example.org.crt -days 500 -sha256

Nützliche aliase für bash

Wenn man in bash aliase anlegt kannt man die, doch recht schwierig zu merkenden Kommandos abkürzen:

alias csrview='openssl req -text -noout -verify -in'
alias crtview='openssl x509 -text -noout -in'
alias sslkeygen='openssl genrsa 4096 -out'

Nützliche Shell Scripts

Diese Scripts kann man im ~/bin/ Verzeichnis ablegen zum einfachen aufrufen.

checkcert
Zeigt die Checksummen von KEY, CRT und CSR an, damit man sofort sieht ob diese zusammenpassen.

#!/bin/bash

DOMAIN=$1
if [ -z "$DOMAIN" ]; then
  echo "usage: $0 <domain.tld>"
  exit 1
fi

if [ "$DOMAIN" != "" ]; then
  if [ -f  $DOMAIN.crt ]; then
    echo -n "CRT: "; openssl x509 -noout -modulus -in $DOMAIN.crt | openssl md5
  fi
  if [ -f  $DOMAIN.key ]; then
    echo -n "KEY: "; openssl  rsa -noout -modulus -in $DOMAIN.key | openssl md5
  fi
  if [ -f  $DOMAIN.csr ]; then
    echo -n "CSR: "; openssl  req -noout -modulus -in $DOMAIN.csr | openssl md5
  fi
fi

Festplatten im laufenden Betrieb entfernen („hot-remove“)

Will man unter Linux eine Disk „hot removen“, also im laufenden Betrieb herausziehen, muss man danach auch die Referenzen auf das Device entfernen.

Macht man dies nicht und „reisst die Disk einfach heraus“, erhält man solche unschönen Fehler im messages log, bzw. mit dmesg:

end_request: I/O error, dev sdd, sector 209715192
sd 0:0:3:0: SCSI error: return code = 0x00010000
end_request: I/O error, dev sdd, sector 0
sd 0:0:3:0: SCSI error: return code = 0x00010000
end_request: I/O error, dev sdd, sector 0

oder im LVM:

[root@server ~]# vgs
  /dev/sdd: read failed after 0 of 4096 at 0: Input/output error
  VG     #PV #LV #SN Attr   VSize   VFree
  [...]

Um die Festplatte im laufenden Betrieb richtig entfernen zu können, muss man nebst dem obligatorischen korrektem unmounten / aus der VG removen / pvremove / usw. folgendes tun um die System-Referenz auf das Device entfernen:

echo 1 > /sys/block/<DEVICE>/device/delete

Wobei <DEVICE> hier mit dem Device-Namen ersetzt werden muss, in unserem Fall z.b. „sdd“.

Man kann diese Prozedur im übrigen auch machen, wenn man die Festplatte schon heraus gezogen hat, um diese Meldungen verschwinden zu lassen. (:wink:)

Quellen

Nach CentOS6 upgrade: Windows clients lassen sich nicht mehr zur Domäne hinzufügen

Nach dem upgrade von CentOS/RHEL 5 auf CentOS/RHEL 6 stellt man fest, dass sich Windows clients nicht mehr an der SAMBA-Domäne anmelden können.

Es erscheint die folgende Meldung:

Der folgende Fehler ist beim Abfragen von DNS über den Ressourceneintrag der Dienstidentifizierung (SRV) aufgetreten, der zur Suche eines Domänencontrollers für die Domäne "my.domain.tld" verwendet wird:
 
Fehler: "Der DNS-Name ist nicht vorhanden."
(Fehlercode 0x0000232B RCODE_NAME_ERROR)
 
Die Abfrage war für den SRV-Eintrag für _ldap._tcp.dc._msdcs.MY.DOMAIN.TLD
 
Die häufigsten Ursachen dieses Fehlers sind:
 
- Der DNS-SRV-Eintrag wurde nicht in DNS registriert.
 
- Mindestens eine der folgenden Zonen enthalten keine Delegierung zu dieser untergeordneten Zone:
 
my.domain.tld
domain.tld
tld
. (die Stammzone)
 
Klicken Sie auf "Hilfe", um weitere Informationen über die Fehlerbehebung zu erhalten.

Das Problem liegt daran, dass bei CentOS 5 der smb und der nmb daemon zusammen im startscript: /etc/init.d/smb gestartet wurden.
Bei CentOS 6 hingegen, werden diese über die zwei getrennten Startscript: /etc/init.d/smb und /etc/init.d/nmb gestartet. Vergisst man nun, den nmb daemon zu aktivieren, schlägt das hinzufügen zur domäne fehl.

Das problem wird durch starten des nmb daemons gelöst:

chkconfig nmb on
/etc/init.d/nmb start

Diagnostizieren kann man das Problem mit den folgendes commands:

smbclient -L <IP> -U%
Domain=[MY.DOMAIN.TLD] OS=[Unix] Server=[Samba 3.5.10-115.el6_2]
 
        Sharename       Type      Comment
        ---------       ----      -------
        print$          Disk      Printer Driver Download Area
        share           Disk      Temporary file space
        media           Disk      Video, Bilder und Sound
        IPC$            IPC       IPC Service (domain-server)
        myprinter      Printer   HP Color LaserJet
Domain=[MY.DOMAIN.TLD] OS=[Unix] Server=[Samba 3.5.10-115.el6_2]
 
        Server               Comment
        ---------            -------
        DOMAIN-SERVER        domain-server
        MYWORKSTATION
 
        Workgroup            Master
        ---------            -------
        MY.DOMAIN.TLD        DOMAIN-SERVER

(Wenn der PDC nicht funktioniert sind die unteren beiden Abschnitte "Server" und "Workgroup" leer.

nmblookup -A <PDC-IP>
Looking up status of x.x.x.x
        DOMAIN-SERVER       <00> -         B <ACTIVE>
        DOMAIN-SERVER       <03> -         B <ACTIVE>
        DOMAIN-SERVER       <20> -         B <ACTIVE>
        ..<b>MSBROWSE</b>. <01> - <GROUP> B <ACTIVE>
        MY.DOMAIN.TLD   <1d> -         B <ACTIVE>
        MY.DOMAIN.TLD   <1b> -         B <ACTIVE>
        MY.DOMAIN.TLD   <1c> -         B <ACTIVE>
        MY.DOMAIN.TLD   <1e> - <GROUP> B <ACTIVE>
        MY.DOMAIN.TLD   <00> - <GROUP> B <ACTIVE>
 
        MAC Address = 00-00-00-00-00-00

Mehrere Linux Konsolenfenster mit screen

Auch in einem Linux Terminal kann man mehrere "Fenster" haben – Und das praktische dabei ist: Diese laufen automatisch weiter, wenn man sich aus der aktuellen SSH Session ausloggt! (:wink:)

Möglich wird dies mit dem Programm "screen", einem sogenannten "Terminal-multiplexer".

[stextbox id=“note“ caption=“Hinweis“]screen gilt mittlerweile als veraltet und ausserdem ist die Entwicklung tot.
Als bessere alternative wird tmux angesehen, welches jedoch sehr ähnlich funktioniert und die Bedienung von dieser Seite abgeleitet werden kann.[/stextbox]

Zum Benutzen gibt man in der Linux Session einfach "screen" ein.

Hier kann man dann ganz normal Programme laufen lassen. Will man sich nun aus dieser screen-session ausloggen, drückt man CTRL+A und gibt dann: "d" (für dettach) ein. Und schon ist man wieder in der normalen Linux shell, wo man sich nun aus- und nach dem einloggen das laufende Programm einfach mit "screen -r" (re-attach) zurückholen kann.

Die Bedienung von screen erfolgt im allgemeinen immer mittels: [[CTRL]+a, gefolgt von einem Buchstaben als Befehl; also ähnlich wie ESC beim vi.

Die folgenden Befehle sind in einer screen session sehr nützlich:

  • [[CTRL]+a c

[c]reate, erzeugt ein neues screen Fenster.

  • [[CTRL]+a n

[n]ext, springt zum nächsten screen Fenster.

  • [[CTRL]+a p

[p]revious, springt zum vorherigen screen Fenster

  • [[CTRL]+a #

Das # steht für eine Nummer, mit der man direkt zum entsprechenden Terminal springen kann. Das erste Fenster startet ab 0, welches also mittels CTRL+a 0 erreicht werden kann.

  • [[CTRL]+a A

Damit kann man dem Fesnter einen Namen geben

  • [[CTRL]+a "

Eine Übersicht aller screen Fenster anzeigen

  • [[CTRL]+a K

[K]ill, schliesst das screen Fenster und beendet die darin laufenden Programme.

  • [[CTRL]+a S

[S]plit, erzeugt einen horizontalen splitscreen (im neuen screen muss noch mit [CTRL]+a c ein neues Fenster erzeugt werden)

  • [[CTRL]+a |

Wie oben, aber mit einem horizontalem splitscreen

  • [[CTRL]+a [[TAB]

Wechselt zwischen den splitscreens

  • [[CTRL]+a X

Schliesst den aktuellen splitscreen

  • [[CTRL]+a Q

Schliesst alle splitscreens

Quellen

linux screen terminal
Screen auf wiki.archlinux.de