ssl

Warum man auf OpenSSL 1.1.1 wartet

Written by  on Juni 6, 2018

Schön langsam wird es Zeit fürs neue OpenSSL 1.1.1. Das will man haben, damit endlich TLS 1.3 in der Breite verfügbar wird.
Aber es gibt weitere interessante Änderungen.
SNI ist ab dann der Standard für s_client.
Bei s_client -starttls werden mehr Protokolle wie LDAP unterstützt.

SSL Fehler

Written by  on März 18, 2018

Ist schon wieder ein paar Tage her. Aber woher kam dieser Fehler? War nur einmal sichtbar. Foglende Aufrufe haben wieder funktioniert.

OpenSSL in MobaXterm

Written by  on November 8, 2017

Neue OpenSSL Version kompilieren in MobaXterm bricht einfach ab mit Fehlermeldung

./config && make
...
...
...
gcc  -I. -Iinclude -DDSO_DLFCN -DHAVE_DLFCN_H -DNDEBUG -DOPENSSL_THREADS -DOPENSSL_NO_STATIC_ENGINE -DOPENSSL_PIC-DOPENSSL_BN_ASM_PART_WORDS -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DRC4_ASM -DMD5_ASM -DRMD160_ASM -DAES_ASM -DVPAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DPADLOCK_ASM -DPOLY1305_ASM -DOPENSSLDIR=""/usr/local/ssl"" -DENGINESDIR=""/usr/local/lib/engines-1.1"" -D TERMIOS -DL_ENDIAN -Wall -O3 -fomit-frame-pointer  -D_WINDLL -MMD -MF ssl/tls_srp.d.tmp -MT ssl/tls_srp.o -c -o ssl/tls_srp.o ssl/tls_srp.c
ar  r libssl.a ssl/bio_ssl.o ssl/d1_lib.o ssl/d1_msg.o ssl/d1_srtp.o ssl/methods.o ssl/pqueue.o ssl/record/dtls1_bitmap.o ssl/record/rec_layer_d1.o ssl/record/rec_layer_s3.o ssl/record/ssl3_buffer.o ssl/record/ssl3_record.o ssl/s3_cbc.o ssl/s3_enc.o ssl/s3_lib.o ssl/s3_msg.o ssl/ssl_asn1.o ssl/ssl_cert.o ssl/ssl_ciph.o ssl/ssl_conf.o ssl/ssl_err.o ssl/ssl_init.o ssl/ssl_lib.o ssl/ssl_mcnf.o ssl/ssl_rsa.o ssl/ssl_sess.o ssl/ssl_stat.o ssl/ssl_txt.o ssl/ssl_utst.o ssl/statem/statem.o ssl/statem/statem_clnt.o ssl/statem/statem_dtls.o ssl/statem/statem_lib.o ssl/statem/statem_srvr.o ssl/t1_enc.o ssl/t1_ext.o ssl/t1_lib.o ssl/t1_reneg.o ssl/t1_trce.o ssl/tls_srp.o
ar: creating libssl.a
ranlib libssl.a || echo Never mind.
/bin/make -f ./Makefile.shared -e \
        PLATFORM=Cygwin-x86 \
        PERL="/usr/bin/perl" SRCDIR='.' DSTDIR="." \
        INSTALLTOP='/usr/local' LIBDIR='lib' \
        LIBDEPS=' '""' ' \
        LIBNAME=crypto SHLIBVERSION=1.1 \
        STLIBNAME=libcrypto.a \
        SHLIBNAME=libcrypto.dll.a SHLIBNAME_FULL=cygcrypto-1.1.dll \
        CC='gcc' CFLAGS='-DDSO_DLFCN -DHAVE_DLFCN_H -DNDEBUG -DOPENSSL_THREADS -DOPENSSL_NO_STATIC_ENGINE -DOPENSSL_PIC -DOPENSSL_BN_ASM_PART_WORDS -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DRC4_ASM -DMD5_ASM -DRMD160_ASM -DAES_ASM -DVPAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DPADLOCK_ASM -DPOLY1305_ASM -DOPENSSLDIR=""/usr/local/ssl"" -DENGINESDIR=""/usr/local/lib/engines-1.1"" -DTERMIOS -DL_ENDIAN -Wall -O3 -fomit-frame-pointer  -D_WINDLL' \
        LDFLAGS='' SHARED_LDFLAGS='-shared ' \
        RC='windres' SHARED_RCFLAGS='' \
        link_shlib.cygwin-shared
make[2]: Entering directory '/drives/c/temp/openssl-1.1.0g'
/usr/bin/perl ./util/mkrc.pl cygcrypto-1.1.dll | windres  -o rc.o
LD_LIBRARY_PATH=:/bin gcc -DDSO_DLFCN -DHAVE_DLFCN_H -DNDEBUG -DOPENSSL_THREADS -DOPENSSL_NO_STATIC_ENGINE -DOPENSSL_PIC -DOPENSSL_BN_ASM_PART_WORDS -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DRC4_ASM -DMD5_ASM -DRMD160_ASM -DAES_ASM -DVPAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DPADLOCK_ASM -DPOLY1305_ASM -DOPENSSLDIR="/usr/local/ssl" -DENGINESDIR="/usr/local/lib/engines-1.1" -DTERMIOS -DL_ENDIAN -Wall -O3 -fomit-frame-pointer -D_WINDLL -shared -shared -Wl,--enable-auto-image-base -Wl,-Bsymbolic -Wl,--out-implib,libcrypto.dll.a rc.o -o cygcrypto-1.1.dll -Wl,--whole-archive libcrypto.a -Wl,--no-whole-archive
libcrypto.a(async_posix.o):async_posix.c:(.text+0xe): undefined reference to `getcontext'
libcrypto.a(async_posix.o):async_posix.c:(.text+0x56): undefined reference to `getcontext'
libcrypto.a(async_posix.o):async_posix.c:(.text+0xd4): undefined reference to `makecontext'
libcrypto.a(async.o):async.c:(.text+0x34): undefined reference to `setcontext'
collect2: error: ld returned 1 exit status
Makefile.shared:243: recipe for target 'link_shlib.cygwin' failed
make[2]: *** [link_shlib.cygwin] Error 1
make[2]: Leaving directory '/drives/c/temp/openssl-1.1.0g'
Makefile:639: recipe for target 'libcrypto.dll.a' failed
make[1]: *** [libcrypto.dll.a] Error 2
make[1]: Leaving directory '/drives/c/temp/openssl-1.1.0g'
Makefile:130: recipe for target 'all' failed
make: *** [all] Error 2

Lösung:

./config no-async && make

Der Build läuft durch und baut eine funktionierende exe

$ apps/openssl.exe version
OpenSSL 1.1.0g  2 Nov 2017

Zitat des Tages

Written by  on Oktober 25, 2017

Beschreibt exakt was wir alle tagtäglich erleben mit SSL/TLS/X.509

Allerdings sind Verbindungen zu diesen Seiten nicht zwangsläufig sicher. Die Verwendung schwacher Verschlüsselungsalgorithmen, Schwachstellen in den Webservern oder SSL-Bibliotheken in Verbindung mit allen möglichen Angriffstechniken, können Eindridnglinge auf empfindliche Informationen zugreifen lassen. Ein wichtiger Aspekt ist auch die Vertrauenswürdigkeit einer öffentlichen Zertifizierungsstelle. Die bekanntesten offiziellen Zertifizierungsstellen sind … und …, deren Verwendung schon in die meisten Browser kompiliert ist und daher automatisch akzeptiert wird.

HSTS Preload

Written by  on Oktober 18, 2017

Das HSTS Preloading wurde mittlerweile aufgeschaltet:

Status: xn--hllrigl-90a.at is currently preloaded.

Sollte sofort sichtbar sein, wer versucht http://www.höllrigl.at aufzurufen wird sofort auf https://www.höllrigl.at umgeleitet.
Auch die SSLLabs Prüfung erkennt das:

HSTS Preloading	Chrome  Edge  Firefox  IE  

CAA records

Written by  on Oktober 4, 2017

Wie schaut ein CAA Record aus in bind:

xn--hllrigl-90a.at. CAA 1 issue "letsencrypt.org"

Erstellen lassen sich die CAA Records unter sslmate.com/caa. So bekommt man auch eine Auflistung aktueller Kürzel der CAs.

CAA Record mit dig überprüfen:

$ dig CAA höllrigl.at
...
;; QUESTION SECTION:
;höllrigl.at.                   IN      CAA

;; ANSWER SECTION:
höllrigl.at.            300     IN      CAA     0 iodef "mailto:hostmaster@xn--hllrigl-90a.at"
höllrigl.at.            300     IN      CAA     0 issue "letsencrypt.org"
...

Wenn dig den CAA Type noch nicht versteht:

$ dig höllrigl.at type257
...
;; QUESTION SECTION:
;höllrigl.at.                   IN      TYPE257

;; ANSWER SECTION:
höllrigl.at.            300     IN      TYPE257 \# 22 000569737375656C657473656E63727970742E6F7267
höllrigl.at.            300     IN      TYPE257 \# 43 0005696F6465666D61696C746F3A686F73746D617374657240786E2D 2D686C6C7269676C2D3930612E6174

HSTS Preload WordPress

Written by  on Oktober 2, 2017

HSTS Header korrekt setzen inklusive preload in WordPress mit dem Plugin Security Headers
Preloading für die Browser aktivieren lassen unter hstspreload.org

Status: xn--hllrigl-90a.at is pending submission to the preload list.

Verify X509 Certificate

Written by  on September 8, 2017

Es ist nicht ausreichend nur den Private Key zu überprüfen!
OpenSSL bietet auch eine einfache Möglichkeit einen CSR zu prüfen:

openssl req -in example.csr -verify
verify OK

Beim Public Key wird es komplizierter. Einzig eine Prüfung mit der Signatur der übergeordneten CA hilft. Hier eine erste Version eines Prüfscriptes.

#!/bin/bash
if [[ $# -ne 1 ]]; then
  echo "Wrong number of arguments."
  exit 1
fi

FILE=$1

# Allows to configure different openssl version
OPENSSL=$(which openssl)
TEMPDIR="/tmp
USERAGENT="CustomUserAgent"
# A proxy server would also get configured here
WGETOPTS="--user-agent=${USERAGENT} --timeout=5 --tries=1 -e"

SIGNER=$($OPENSSL x509 -in ${FILE} -text -noout | grep "CA Issuers - URI:http" | cut -d":" -f2- | tr -d '\r')
if [[ -z $SIGNER ]]; then
  echo "No issuer certificate found for download."
  exit 1
fi
SIGNERFILE=$(awk -F'/' '{print $NF}' <<<$SIGNER)

/usr/bin/wget $WGETOPTS $SIGNER -O $TEMPDIR/$SIGNERFILE >/dev/null 2>&1

# Try to convert to PEM
$OPENSSL x509 -inform der -in $TEMPDIR/$SIGNERFILE -out $TEMPDIR/$SIGNERFILE.cer 2>/dev/null
if [[ -s $TEMPDIR/$SIGNERFILE.cer ]]; then
  # use converted file, if conversation was successfull
  SIGNERFILE="$SIGNERFILE.cer"
fi
echo -n "Certificate verification: "
$OPENSSL verify -CAfile $TEMPDIR/$SIGNERFILE -partial_chain $FILE 2>&1 | grep -e "certificate signature failure" -e "OK" | cut -d":" -f2

# Cleanup
if [[ ! -z $SIGNERFILE ]]; then
  /bin/rm $TEMPDIR/$SIGNERFILE*
fi

Checking SSL Private Keys

Written by  on August 1, 2017

Die ursprüngliche Frage war, wie kann ich feststellen, ob ein Zertifikat zum ursprünglichen Private Key passt. Googelt man die Frage, findet man auf SSLShopper einen Vorschlag, der aber nicht ausreicht sobald jemand Keys manipuliert!
Also muss noch eine zusätzliche Prüfung ins Script:

openssl rsa -in [privatekey] -check

Stellt sich raus, das funktioniert nicht mehr mit OpenSSL 1.1.0, weil eine Funktion einen neuen Namen erhalten hat. Aber die Leute bei OpenSSL sind da schnell und haben das nach meinen freundlichen Hinweis im Masterbranch eingepflegt.

OpenSSL 1.1.0 gibt’s ja jetzt schon etwas länger. Das bedeutet wohl, dass niemand seine Keys prüft. Zumindest nicht mit der aktuellen OpenSSL Version.

Let’s encrypt

Written by  on April 4, 2017

Good news everyone! Plesk kann seit kurzem auch mit Umlaut-Domains. Daher habe ich das gleich ein neues Zertifikat installiert. Mal sehen, ob sich Plesk jetzt auch ordentlich um die Verlängerung kümmert.

Plesk Let’s Encrypt Extension