It is currently 26.05.2017 01:47


All times are UTC




Post new topic Reply to topic  [ 1 post ] 
Author Message
 Post subject: TLS-Zertifikate unter Windows erstellen
PostPosted: 24.11.2004 16:15 
Mod außer Dienst
User avatar

Joined: 19.10.2004 21:57
Posts: 166
Location: Berlin
Last edit:24.11.2004 Hinzufügen des Hinweises, dass sich auch CommonName in den Client-Zertifikaten ändern muss

-------------------------------------------------------

In OpenVPN ist eine Version von OpenSSL bereits enthalten. Wir können diese
nutzen, oder das aktuellere von
http://www.slproweb.com/products/Win32OpenSSL.html herunter laden, was ich
anrate.

Am Ende des Dokumentes befindet sich die Datei "openssl.cnf". Diese muss an Eure
Bedürfnisse angepasst werden. Wichtig sind Änderungen an folgenden Stellen:

Zeile 37, "dir" auf "C:\\ssl" setzen
Zeile 38, "certs" auf "$dir\\certs" setzen
Zeile 39, "crl_dir" auf "$dir\\crl" setzen
Zeile 40, "database" auf "$dir\\index.txt" setzen
Zeile 43, "new_certs_dir" auf "$dir\\newcerts" setzen
Zeile 45, "certificate" auf "$dir\\meine-ca.crt" setzen
Zeile 46, "serial" auf "$dir\\serial" setzen
Zeile 49, "crl" auf "$dir\\crl.pem" setzen
Zeile 50, "private_key" auf "$dir\\meine-ca.key" setzen
Zeile 51, "RANDFILE" auf "$dir\\.rnd" setzen

Diese Änderungen sind schon vorgenommen, nur wenn eben das Verzeichnis abweicht,
in dem die neu erstellten Zertifikate abgelegt werden sollen muss dies auch in dieser
Datei geändert werden. Und ja, die doppelten Backslashes sind Absicht, das muss
so sein ;)

Ab Zeile 124 werden Werte definiert, die als Standart für jedes erstellte
Zertifikat genutzt werden. Wenn man also bei vielen Sachen nur noch <Enter>
drücken will, kann man hier sinnvolle Werte eintragen, ist aber nicht Pflicht.

Erstelle das Verzeichnis C:\ssl und wechsele in dieses. Du kannst auch ein anderes
nutzen, ich beziehe mich aber im folgenden auf C:\ssl. Kopiere die Datei
openssl.cnf in dieses Verzeichnis. Erstellt in diesem Verzeichnis eine leere
Datei mit dem Namen "index.txt". Die Datei sollte 0 byte groß sein, also kein
Leerzeichen, kein Zeilenumbruch. Nichts ;)
Weiterhin benötigen wir eine nicht ganz so leere Datei mit dem Namen "serial".
Diese sollte die Zwei Zeichen "01" und einen Zeilenumbruch enthalten.


Nun erstellen wir ein so genanntes "Master certificate authority certificate"
und den dazugehörigen privaten Schlüssel.
Code:
openssl req -nodes -new -x509 -keyout meine-ca.key -out meine-ca.crt -days 3650 -config openssl.cnf


Nun erstellen wir ein Zertifikat für den OpenVPN-Server.
Code:
openssl req -nodes -new -keyout Server.key -out Server.csr -config openssl.cnf

Dieses beglaubigen wir (wir sind ja unsere eigene CA) mit
Code:
openssl ca -out Server.crt -in Server.csr -config openssl.cnf

Dieses müssen wir zwei mal mit der Eingabe von "y" bestätigen.
Wenn die Fehlermeldung "wrong number of fields on line 1 (looking for field 6,
got 1, '' left)" bekommt, stellt sicher, das die Datei index.txt auch wirklich 0
byte gross (klein) ist.

Weiter gehts mit einem Zertifikat für den Client_01...
Code:
openssl req -nodes -new -keyout Client_01.key -out Client_01.csr -config openssl.cnf

Auch dieses beglaubigen wir:
Code:
openssl ca -out Client_01.crt -in Client_01.csr -config openssl.cnf


...und mit Client_02...
Code:
openssl req -nodes -new -keyout Client_02.key -out Client_02.csr -config openssl.cnf

Auch dieses beglaubigen wir:
Code:
openssl ca -out Client_02.crt -in Client_02.csr -config openssl.cnf


Den letzten Schritt wiederholen wir für jeden Client, der sich an den Server
verbinden soll. Nur eben den Namen des Zertifikates ändern.
Achtet darauf, das jedes Zertifikat eine andere Bezeichnung von
"organizationalUnitName" (in diesem Beispiel Abteilung 1") bekommt. Sonst
bekommt ihr die Fehlermeldung "TXT_DB error number 2".
Dem Server-Zertifikat könnt ihr den Wert "OpenVPN-Server", den Clients der
Reihe nach "OpenVPN-Client_01", "OpenVPN-Client_02", usw., vergeben.
Ebenso muss sich auch der Wert bei CommonName ändern, da OpenVPN
sonst annimt, dass alle Zertifikate einem einzelnen User zuzuordnen sind und
die neu erstellten Verbindungen unerwartet zurückgesetzt werden.

Nun erstellen wir die "Diffie Hellman parameters".
Code:
openssl dhparam -out dh2048.pem 2048

Diese landen jetzt in der Datei dh2048.pem und sind mit einer 2048-Bit starken
Verschlüsselung gesichert. Möglich sind die Stufen 1024, 2048 und für die unter
Verfolgungswahn leidenden unter uns 4096.

Wenn die Verschlüsselungsstärke geändert wird, sollte der Wert "default_bits" in
Zeile 101 der Datei openssl.cnf dahingehend auch geändert werden.

Im Grunde wären wir jetzt soweit.

In dem Verzeichnis C:\ssl befinden sich nun einige Dateien. Wir benötigen
folgende:
  • meine-ca.crt
  • meine-ca.key
  • Server.crt
  • Server.key
  • Client_01.crt
  • Client_01.key
  • Client_02.crt
  • Client_02.key
  • dh2048.pem

All diese Dateien kopieren wir in das (mit Sicherheit zu erstellende) Verzeichnis
C:\Programme\OpenVPN\Zertifikate. Wenn OpenVPN an anderer Stelle installiert
ist, beachtet dieses wieder bei späteren Pfadangaben.


Um die Zertifikate in OpenVPN zu nutzen, sind folgende Angaben in der
Konfigurationsdatei des Servers und des Clients zu machen:

Server:

Code:
tls-server
dh C:\\Programme\\OpenVPN\\Zertifikate\\dh2048.pem
ca C:\\Programme\\OpenVPN\\Zertifikate\\meine-ca.crt
key C:\\Programme\\OpenVPN\\Zertifikate\\Server.key
cert C:\\Programme\\OpenVPN\\Zertifikate\\Server.crt


Client:
Code:
tls-client
ca C:\\Programme\\OpenVPN\\Zertifikate\\meine-ca.crt
key C:\\Programme\\OpenVPN\\Zertifikate\\Client_01.key
cert C:\\Programme\\OpenVPN\\Zertifikate\\Client_01.crt


Damit ein Client nun auf den Server verbinden kann, benötigt er die Zertifikate.
Die Datei meine-ca.crt benötigt jeder Client. Die Dateien, die bei "key" und
"cert" angegeben sind, sind dem jeweiligen Client zu übermitteln. Am besten per
Post oder mittels GPG, PGP oder vergleichbar sicheres übertragungsmedium auch
über dsa Internet.

Beispiel-Konfigurationen befinden sich auch hier am Ende des Dokumentes.
In dieser Konfiguration akzeptiert der Server als Multi-Client-Server, wodurch
er mehrere Clients mit nur einer Instanz bedienen kann (mode server). Es besteht
die Möglichkeit, dass sich die einzelnen Clients untereinander verständigen
können (client-to-client). Es wird das TAP-Device genutzt (dev tap). Die
IP-Adresse des Servers des VPN-Tunnels ist 10.0.1.1 mit der Netzwerkmaske
255.0.0.0 (ifconfig 10.0.1.1 255.0.0.0). Den Clients werden die IP's 10.0.1.2 bis
einschliesslich 10.0.1.254 vergeben (ifconfig-pool 10.0.1.2 10.0.1.254).
Passt diese Werte euren Begebenheiten an.



--------------------------------------------------------

--- BEGIN openssl.cnf ---
Code:
#
# OpenSSL example configuration file.
# This is mostly being used for generation of certificate requests.
#

# This definition stops the following lines choking if HOME isn't
# defined.
HOME         = .
RANDFILE      = $ENV::HOME/.rnd

# Extra OBJECT IDENTIFIER info:
#oid_file      = $ENV::HOME/.oid
oid_section      = new_oids

# To use this configuration file with the "-extfile" option of the
# "openssl x509" utility, name here the section containing the
# X.509v3 extensions to use:
# extensions      =
# (Alternatively, use a configuration file that has only
# X.509v3 extensions in its main [= default] section.)

[ new_oids ]

# We can add new OIDs in here for use by 'ca' and 'req'.
# Add a simple OID like this:
# testoid1=1.2.3.4
# Or use config file substitution like this:
# testoid2=${testoid1}.5.6

####################################################################
[ ca ]
default_ca   = CA_default      # The default ca section

####################################################################
[ CA_default ]

dir      = C:\\ssl      # Where everything is kept
certs      = $dir\\certs      # Where the issued certs are kept
crl_dir      = $dir\\crl      # Where the issued crl are kept
database   = $dir\\index.txt   # database index file.
#unique_subject   = no         # Set to 'no' to allow creation of
               # several ctificates with same subject.
new_certs_dir   = $dir\\newcerts      # default place for new certs.

certificate   = $dir\\meine-ca.crt    # The CA certificate
serial      = $dir\\serial       # The current serial number
#crlnumber   = $dir\crlnumber   # the current crl number
               # must be commented out to leave a V1 CRL
crl      = $dir\\crl.pem       # The current CRL
private_key   = $dir\\meine-ca.key   # The private key
RANDFILE   = $dir\\.rnd         # private random number file

x509_extensions   = usr_cert      # The extentions to add to the cert

# Comment out the following two lines for the "traditional"
# (and highly broken) format.
name_opt    = ca_default      # Subject Name options
cert_opt    = ca_default      # Certificate field options

# Extension copying option: use with caution.
# copy_extensions = copy

# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
# so this is commented out by default to leave a V1 CRL.
# crlnumber must also be commented out to leave a V1 CRL.
# crl_extensions   = crl_ext

default_days   = 3650         # how long to certify for
default_crl_days= 30         # how long before next CRL
default_md   = md5         # which md to use.
preserve   = no         # keep passed DN ordering

# A few difference way of specifying how similar the request should look
# For type CA, the listed attributes must be the same, and the optional
# and supplied fields are just that :-)
policy      = policy_match

# For the CA policy
[ policy_match ]
countryName      = match
stateOrProvinceName   = match
organizationName   = match
organizationalUnitName   = optional
commonName      = supplied
emailAddress      = optional

# For the 'anything' policy
# At this point in time, you must list all acceptable 'object'
# types.
[ policy_anything ]
countryName      = optional
stateOrProvinceName   = optional
localityName      = optional
organizationName   = optional
organizationalUnitName   = optional
commonName      = supplied
emailAddress      = optional

####################################################################
[ req ]
default_bits      = 2048
default_keyfile    = privkey.pem
distinguished_name   = req_distinguished_name
attributes      = req_attributes
x509_extensions   = v3_ca   # The extentions to add to the self signed cert

# Passwords for private keys if not present they will be prompted for
# input_password = secret
# output_password = secret

# This sets a mask for permitted string types. There are several options.
# default: PrintableString, T61String, BMPString.
# pkix    : PrintableString, BMPString.
# utf8only: only UTF8Strings.
# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings).
# MASK:XXXX a literal mask value.
# WARNING: current versions of Netscape crash on BMPStrings or UTF8Strings
# so use this option with caution!
string_mask = nombstr

# req_extensions = v3_req # The extensions to add to a certificate request

[ req_distinguished_name ]
countryName         = Country Name (2 letter code)
countryName_default      = DE
countryName_min         = 2
countryName_max         = 2

stateOrProvinceName      = State or Province Name (full name)
stateOrProvinceName_default   = Berlin

localityName         = Locality Name (eg, city)
localityName_default      = Berlin

0.organizationName      = Organization Name (eg, company)
0.organizationName_default   = Meine Firma

# we can do this but it is not needed normally :-)
#1.organizationName      = Second Organization Name (eg, company)
#1.organizationName_default   = World Wide Web Pty Ltd

organizationalUnitName      = Organizational Unit Name (eg, section)
organizationalUnitName_default   = Abteilung 1

commonName         = Common Name (eg, YOUR name)
commonName_default      = Mein Name
commonName_max         = 64

emailAddress         = Email Address
emailAddress_default      = meine@emailadres.se
emailAddress_max      = 64

# SET-ex3         = SET extension number 3

[ req_attributes ]
challengePassword      = A challenge password
challengePassword_min      = 6
challengePassword_max      = 20

unstructuredName      = An optional company name

[ usr_cert ]

# These extensions are added when 'ca' signs a request.

# This goes against PKIX guidelines but some CAs do it and some software
# requires this to avoid interpreting an end user certificate as a CA.

basicConstraints=CA:FALSE

# Here are some examples of the usage of nsCertType. If it is omitted
# the certificate can be used for anything *except* object signing.

# This is OK for an SSL server.
# nsCertType         = server

# For an object signing certificate this would be used.
# nsCertType = objsign

# For normal client use this is typical
# nsCertType = client, email

# and for everything including object signing:
# nsCertType = client, email, objsign

# This is typical in keyUsage for a client certificate.
# keyUsage = nonRepudiation, digitalSignature, keyEncipherment

# This will be displayed in Netscape's comment listbox.
nsComment         = "OpenSSL Generated Certificate"

# PKIX recommendations harmless if included in all certificates.
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer:always

# This stuff is for subjectAltName and issuerAltname.
# Import the email address.
# subjectAltName=email:copy
# An alternative to produce certificates that aren't
# deprecated according to PKIX.
# subjectAltName=email:move

# Copy subject details
# issuerAltName=issuer:copy

#nsCaRevocationUrl      = http://www.domain.dom/ca-crl.pem
#nsBaseUrl
#nsRevocationUrl
#nsRenewalUrl
#nsCaPolicyUrl
#nsSslServerName

[ v3_req ]

# Extensions to add to a certificate request

basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment

[ v3_ca ]


# Extensions for a typical CA


# PKIX recommendation.

subjectKeyIdentifier=hash

authorityKeyIdentifier=keyid:always,issuer:always

# This is what PKIX recommends but some broken software chokes on critical
# extensions.
#basicConstraints = critical,CA:true
# So we do this instead.
basicConstraints = CA:true

# Key usage: this is typical for a CA certificate. However since it will
# prevent it being used as an test self-signed certificate it is best
# left out by default.
# keyUsage = cRLSign, keyCertSign

# Some might want this also
# nsCertType = sslCA, emailCA

# Include email address in subject alt name: another PKIX recommendation
# subjectAltName=email:copy
# Copy issuer details
# issuerAltName=issuer:copy

# DER hex encoding of an extension: beware experts only!
# obj=DER:02:03
# Where 'obj' is a standard or added object
# You can even override a supported extension:
# basicConstraints= critical, DER:30:03:01:01:FF

[ crl_ext ]

# CRL extensions.
# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL.

# issuerAltName=issuer:copy
authorityKeyIdentifier=keyid:always,issuer:always

--- END openssl.cnf ---

--- BEGIN server.ovpn ---
Code:
port 5000
mode server
ifconfig 10.0.1.1 255.0.0.0
ifconfig-pool 10.0.1.2 10.0.1.254
dev tap
client-to-client
tls-server
dh C:\\Programme\\OpenVPN\\Zertifikate\\dh2048.pem
ca C:\\Programme\\OpenVPN\\Zertifikate\\meine-ca.crt
key C:\\Programme\\OpenVPN\\Zertifikate\\Server.key
cert C:\\Programme\\OpenVPN\\Zertifikate\\Server.crt
ping 10
ping-restart 120
push "ping 10"
push "ping-restart 60"
verb 4

--- END server.ovpn ---

--- BEGIN client_01.ovpn ---
Code:
port 5000
remote blablub.dyndns.org
dev tap
tls-client
ca C:\\Programme\\OpenVPN\\Zertifikate\\meine-ca.crt
key C:\\Programme\\OpenVPN\\Zertifikate\\Client_01.key
cert C:\\Programme\\OpenVPN\\Zertifikate\\Client_01.crt
pull

-- END client_01.ovpn ---


--- BEGIN client_02.ovpn ---
Code:
port 5000
remote blablub.dyndns.org
dev tap
tls-client
ca C:\\Programme\\OpenVPN\\Zertifikate\\meine-ca.crt
key C:\\Programme\\OpenVPN\\Zertifikate\\Client_02.key
cert C:\\Programme\\OpenVPN\\Zertifikate\\Client_02.crt
pull

-- END client_02.ovpn ---


-------------------------------------------------------

Lizenz GFDL 1.2 http://www.gnu.org/copyleft/fdl.html

Ich bin das bei mir alles durchgegangen und es hat funktioniert.

_________________
MfG Oliver Beck

--
Unix ist ein benutzerfreundliches System.
Es ist nur sehr eigen in der Wahl seiner Freunde.


Top
Offline Profile  
Reply with quote  
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 1 post ]  Moderator: Moderators

All times are UTC


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Theme created StylerBB.net