Debian - openSSL rootCa

Q

Quinix1

Gast
Hallo,
ich versuche grade mit openSSl und Debian umzugehen, und brauche etwas hilfe.
Bisher hab ein ein CA erstellt:
HTML:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /home/debian/localhost.key -out /home/debian/localhost.crt

dann meine apache2 local host Seite mit https "abgesichert".
https.conf:
HTML:
Listen 443
<VirtualHost *:443>
	     ServerName localhost
	     DocumentRoot /var/www/
	     SSLEngine on
	     SSLCertificateFile "/home/debian/localhost.crt"
	     SSLCertificateKeyFile "/home/debian/localhost.key"
	     <Directory /var/www/>
	     		AllowOverride all
	     </Directory>
	     ErrorLog /var/log/apache2/error.log
	     ServerSignature On
</VirtualHost>

Dann hab ich auf der localhost Seite per "Ausnahme hinzufügen" das CA hinzugefügt.
Das CA wird angezeigt, aber es steht immer noch "Verbindung ist nicht sicher" dran. ("https://localhost/") . Fühlt sich nicht richtig an?

Als nächstes will ich von einem anderen Gerät im gleichen Netzwerk auf die Seite zugreifen. Wie stelle ich das CA zum Download zu Verfügung? ("localhost.crt" in ein bestimmtes Verzeichnis kopieren?)

Zum Schluss soll ich das Verzeichnis "/conf" sichern, dass nur TLS Clients mit einem Client-Ca (von meinem Ca signiert) auf das Verzeichnis zugreifen können,
Die Aufgabenstellung versteh ich nicht wirklich. Mit "conf" hab ich noch nichts gemacht.
Oder soll die Seite einfach nur sichtbar sein, wenn ein Client das Ca hat?

Ps: ich hab schon lange zum googeln und Ca erstellen gebraucht, aber irgendwann rennt einfach die Zeit davon.
Danke.
 
Vorweg
CA = Certificate Authority = Die Stelle die Zertifikate ausstellt bzw. Signiert.

Du hast da nur ein Zertifikat. (Es gibt auch CA-Certificates, das Zertifikat das die CA nutzt um Zertifikate zu signieren)
Das ist ein Himmelweiter unterschied :D

Dass die Verbindung als "unsicher" gilt ist normal.
Eben weil das Zertifikat von dir selbst und nicht von einer anerkannten CA ausgestellt / signiert ist.

Es gibt da Zwei Möglichkeiten

1. du besorgst ein offiziell signiertes Zertifikat von einer anerkannten CA. Kostenlos bekommst du zb eines von "Lets Encrypt"
2. du ziehst das ganze größer auf. Dafür erstellst du eine interne CA welche dein SSL Zertifikat signiert. Das Zertifikat (öffentlicher Teil) der CA verteilst du entsprechend und importierst es in den Speicher für "vertrauenswürdige Stammzertifizierungsstellen" (IE und Chrome nehmen es aus dem lokalen Windows-Zertfikatsspeicher; FF muss extra importiert werden) [Prinzipiell sollte die Seite "grün" sein wenn du das erstellte Zertifikat als "stammzertifizierungsstelle" im FF importierst]


Zu deiner anderen Frage.
Entweder du machst der per USB-Stick oder legst unter Http://<server>/certs/host-cert.crt ab.
Das zertifikat muss aber trotzdem auf jedem Rechner nochmal separat installiert werden, damit die Verbindung "sicher" ist.

Die Aufgabenstellung mit "Conf" ist etwas unverständlich.
Entweder es sind die Daten unter /etc/apache2/* gemeint oder ein entsprechendes Verzeichnis unter /var/www/*.

Auf ersteres hat ein User nur per terminal oder SSH Zugriff - Zweiteres muss eben entsprechend eingerichtet sein - das ließe sich vermutlich über eine ".htaccess" einrichten. Ich habe allerdings noch nie eine ".htaccess" für Zertifikatsbasierte Anmeldungen geschrieben.


AUßERDEM!!!!!
Dein Zertifikat wurde ohne SA erstellt (subject alternatename)!
FF und Chrome verlangen diese aber, sonst ist das Zertifikat nicht gültig - egal von wem das ausgestellt oder importiert wurde!

Du erstellst eine File names "req.conf"
Code:
[req]distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no
[req_distinguished_name]
C = DE
ST = BY
L = Freyung
O = Ihr Firmenname
OU = Abteilung XY
CN = www.ihre-firma.de
[v3_req]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = www.ihre-firma.de
DNS.2 = ihre-firma.de
DNS.3 = www.ihrefirma.de
DNS.4 = ihrefirma.de
[Von: Thomans-Krenn-wiki]

Die "alt_names" müssen die URL deines Servers sein den deine Clients benutzen.

also bspw.
"DNS.1 = testserver.frima.intern"
"DNS.2 = testserver"
"DNS.3 = Zerttest.firma.intern"
"DNS.4 = Zerttest"

und erstellst das Cert dann mit

Code:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -out certificate.pem -key privkey.pem -config req.conf
(Den Befehl hab ich aus dem Kopf runter geschrieben, ich erhebe da keinen Anspruch auf Vollständigkeit ;) )


Grüße :)
 
Danke, hilft mir schon mal weiter.

so lautet die komplette Aufgabenstellung.
TLS Client-Authentifizierung
a. Sichern Sie das Unterverzeichnis /conf Ihrer Webseite so, dass nur TLS-Clients mit
einem von Ihrer Root-CA signiertem Client-Zertifikat auf das Verzeichnis zugreifen
können.
Also wahrscheinlich dann per ssh
 
Quinix1 schrieb:
Also wahrscheinlich dann per ssh
Nein. Ssh hat nichts mit TLS zu tun sondern verwendet ein eigenes Protokoll. Als TLS-Client zum Testen nimmst du "openssl s_client -connect server:port"
 
Zurück
Oben