Creating self-signed SSL certificates

Create a self-signed SSL certificate using openssl:

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out certificate.pem -days 365 -nodes

OpenSSL will ask for Country Name, State or Province Name, Common Name and all that jazz before creating key and certificate.


Create a self-signed SSL certificate using python with the cryptography package:

#! /usr/bin/env python3

from cryptography import x509
 from cryptography.x509.oid import NameOID
 from cryptography.hazmat.primitives import serialization, hashes
 from cryptography.hazmat.primitives.asymmetric import rsa
 from cryptography.hazmat.backends import default_backend
 import datetime

name_attributes = []

country_name = input("COUNTRY_NAME: ")
 if(country_name != ""):
 name_attributes.append(x509.NameAttribute(NameOID.COUNTRY_NAME, country_name))

state_or_province_name = input("STATE_OR_PROVINCE_NAME: ")
 if(state_or_province_name != ""):
 name_attributes.append(x509.NameAttribute(NameOID.STATE_OR_PROVINCE_NAME, state_or_province_name))

locality_name = input("LOCALITY_NAME: ")
 if(locality_name != ""):
 name_attributes.append(x509.NameAttribute(NameOID.LOCALITY_NAME, locality_name))

organization_name = input("ORGANIZATION_NAME: ")
 if(organization_name != ""):
 name_attributes.append(x509.NameAttribute(NameOID.ORGANIZATION_NAME, organization_name))

common_name = input("COMMON_NAME: ")
 if(common_name != ""):
 name_attributes.append(x509.NameAttribute(NameOID.COMMON_NAME, common_name))

print("Enter SubjectAltName DNSName values, one at a time. Press Enter on an empty line to finish.")
 san_list = []
 san = "nonempty"
 while san != "":
 san = input("SAN DNSName: ")
 if san != "":
 san_list.append(x509.DNSName(san))

# Generate our key
 key = rsa.generate_private_key(
 public_exponent=65537,
 key_size=2048,
 backend=default_backend()
 )

# Write our key to disk for safe keeping
 with open("key.pem", "wb") as f:
 f.write(key.private_bytes(
 encoding=serialization.Encoding.PEM,
 format=serialization.PrivateFormat.TraditionalOpenSSL,
 encryption_algorithm=serialization.NoEncryption(),
 ))

# Various details about who we are. For a self-signed certificate the
 # subject and issuer are always the same.
 subject = issuer = x509.Name(name_attributes)

cert = x509.CertificateBuilder().subject_name(
 subject
 ).issuer_name(
 issuer
 ).public_key(
 key.public_key()
 ).serial_number(
 x509.random_serial_number()
 ).not_valid_before(
 datetime.datetime.utcnow()
 ).not_valid_after(
 # Our certificate will be valid for 365 days
 datetime.datetime.utcnow() + datetime.timedelta(days=365)
 )

# add SAN entries if any have been entered
 if san_list:
 cert = cert.add_extension(
 x509.SubjectAlternativeName(san_list),
 critical=False
 )

# Sign our certificate with our private key
 cert = cert.sign(key, hashes.SHA256(), default_backend())

# Write our certificate out to disk.
 with open("certificate.pem", "wb") as f:
 f.write(cert.public_bytes(serialization.Encoding.PEM))

The script will ask for Country Name, State or Province Name, Common Name and all that jazz before creating key and certificate. We even get to enter SubjectAlternativeName values! Great.

Barcodes

Barcodes sind klasse.

Ohne Barcodes müsste man jede Ware beim Verkauf händisch im Kassensystem erfassen oder im Warenbestand suchen.

Aber mit Barcodes: Bip.

ean

Nun bietet das Kassensystem, mit dem ich mich so generell herumschlage, zwar eine Option, mit der Barcodes ausgedruckt werden können. Die ist aber relativ unflexibel. Ich wollte also etwas, mit dem ich selbst EAN-Barcodes basteln kann. Als Vektorgrafik, versteht sich.

Zum Glück hat Wikipedia eine detaillierte Beschreibung, wie so ein Barcode aufgebaut und errechnet wird.

Lange Rede, kurzer Sinn: Ich bastelte ein Python-Skript und ein PHP-Skript, die zu einer EAN den passenden Barcode generieren1. Da das Python-Skript zuerst da war, heißt das Ganze halt noch pyEAN.

Projekt auf GitHub

Die Nutzung des Webdienstes ist kinderleicht: Einfach das PHP-Skript aufrufen und die gewünschte EAN angeben, also zum Beispiel:

http://hscmi.de/ean/makebarcode.php?code=0037600175340

Wer die SVG-Datei lieber zum Download angeboten bekommen möchte, hängt einfach ein &dl=1 an:

http://hscmi.de/ean/makebarcode.php?code=0037600175340&dl=1

So einfach ist das.

Bip.

  1. Warum umständlich anderer Leute Lösungen testen, wenn man auch ganz einfach selbst Aufwand betreiben kann, gell.

Bilder zerlegen

Demletzt habe ich in mein Impressum eine kleine Spielerei eingebaut. Die Adresse ist nicht als Text hinterlegt, sondern als Bild. Beziehungsweise, als 8 Bilder, die übereinandergelegt das eigentliche Bild ergeben.

Um das umzusetzen, habe ich mir ein kleines Python-Skript gebastelt, das die Grafik für mich aufsplittet und auch gleich dazu noch das passende HTML-Snippet erzeugt.

Hier gibt es das Projekt auf GitHub.

Die Benutzung ist total einfach:

./pngfragments.py [Pfad-zur-Bilddatei] [Anzahl-der-Teilbilder]

Daraufhin wird das Bild geöffnet, die Menge aller nicht-transparenten Pixel wird zufällig auf X etwa gleich große Teilmengen aufgeteilt und aus diesen werden dann im Ordner ‚output‘ die Teilbilder erstellt. Zusätzlich wird noch ein passendes HTML-Snippet und eine vollständige HTML-Datei mit diesem Snippet erstellt, mit dem das vollständige Bild dargestellt werden kann.

Je größer die Zahl der Teilbilder gewählt wird, über desto mehr Bilder werden die Pixel verteilt und desto weniger erkennt man logischerweise auch auf den Teilbildern (siehe auch bei den Beispielen)

Technische Daten

Das Skript ist für Python3 geschrieben. Es verarbeitet PNG,- JPEG- und TIFF-Dateien. Für die Grafikbastelei wird die Python Imaging Library (PIL) benutzt, das entsprechende Python-Paket muss also verfügbar sein.

[Update]
By popular demand ist nun auch ein zweites Skript enthalten, mit dem man sich ein Textbild gleich direkt miterstellen kann.

Beispiele

Adresse

Bilder zerlegen
Bilder zerlegen
Bilder zerlegen
Bilder zerlegen
Bilder zerlegen
Bilder zerlegen
Bilder zerlegen
Bilder zerlegen

Teilbilder

Bilder zerlegen

item-0.png

Bilder zerlegen

item-1.png

Bilder zerlegen

item-2.png

Bilder zerlegen

item-3.png

Bilder zerlegen

item-4.png

Bilder zerlegen

item-5.png

Bilder zerlegen

item-6.png

Bilder zerlegen

item-7.png

Avatar

ava.jpg

ava.jpg

Aufteilung in 2 Bilder

ava-0.png

ava-0.png

ava-1.png

ava-1.png

Aufteilung in 4 Bilder

ava-0.png

ava-0.png

ava-1.png

ava-1.png

ava-2.png

ava-2.png

ava-3.png

ava-3.png