15.8. OpenSSL
Terug | Hoofdstuk 15. Beveiliging | Volgende

## 15.8. OpenSSL

Geschreven door Tom Rhodes.

Een toepassing die bij FreeBSD zit die veel gebruikers over het hoofd zien is OpenSSL. OpenSSL biedt een versleutelde transportlaag bovenop de normale communicatielaag. Daardoor biedt het de mogelijkheid met veel netwerktoepassingen en diensten verweven te raken.

Een aantal toepassingen van OpenSSL zijn versleutelde autenticatie van mailcliënten, webgebaseerde transacties als creditcardbetalingen en nog veel meer. Veel ports zoals `www/apache22` en `mail/claws-mail` bieden tijdens het compileren ondersteuning om OpenSSL in te bouwen.

### Opmerking:

In de meeste gevallen zal de Portscollectie proberen de port `security/openssl` te bouwen, tenzij de make variabele `WITH_OPENSSL_BASE` expliciet naar “yes” is gezet.

De versie van OpenSSL die bij FreeBSD zit ondersteunt Secure Sockets Layer v2/v3 (SSLv2/SSLv3), Transport Layer Security v1 (TLSv1) netwerkbeveiligingsprotocollen en kan gebruikt worden als generieke versleutelingsbibliotheek.

### Opmerking:

Hoewel OpenSSL ondersteuning biedt voor het IDEA algoritme, is dat standaard uitgeschakeld in verband met patenten in de Verenigde Staten. Om het te gebruiken dient de licentie gelezen te worden en, als de restricties aanvaardbaar zijn, dient de make-variabele `MAKE_IDEA` ingesteld te worden in `make.conf`.

Een van de meest gebruikte toepassingen van OpenSSL is het leveren van certificaten voor gebruik met softwaretoepassingen. Deze certificaten verzekeren dat de eigenschappen van een bedrijf of individu geldig zijn en niet vervalst. Als het certificaat in kwestie niet geldig verklaard is door een van de “Certificate Authorities” of CA's, dan komt er een waarschuwing. Een Certificate Authority is een bedrijf, zoals VeriSign, dat certificaten ondertekent zodat de eigenschappen van een bedrijf of individu geldig verklaard kunnen worden. Dit proces kost geld en het is zeker geen voorwaarde voor het gebruik van certificaten. Het stelt wel de meer paranoïde gebruikers gerust.

### 15.8.1. Certificaten maken

Voor het maken van certificaten is het volgende commando beschikbaar:

`#` `openssl req -new -nodes -out req.pem -keyout cert.pem` Generating a 1024 bit RSA private key ................ ....................................... writing new private key to 'cert.pem' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:``US`` State or Province Name (full name) [Some-State]:``PA`` Locality Name (eg, city) []:``Pittsburgh`` Organization Name (eg, company) [Internet Widgits Pty Ltd]:``My Company`` Organizational Unit Name (eg, section) []:``Systems Administrator`` Common Name (eg, YOUR name) []:``localhost.example.org`` Email Address []:``trhodes@FreeBSD.org`` Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:``SOME PASSWORD`` An optional company name []:``Another Name``

Let op dat het antwoord direct na “Common Name” een domeinnaam weergeeft. De prompt wil dat er een servernaam wordt ingegeven voor het verificatieproces. Het plaatsen van iets anders dan een domeinnaam zorgt ervoor dat het certificaat waardeloos wordt. Er zijn ook andere opties als verloopdatum, andere versleutelingsalgoritmes, etc, beschikbaar. Een volledige lijst is na te lezen in de handleiding van openssl(1).

Er horen nu twee bestanden te staan in de map waarin het voorgaande commando is uitgevoerd. Het certificaatverzoek, `req.pem`, kan naar een certificaat autoriteit gestuurd worden die de bijgevoegde gegevens kan valideren, het verzoek kan tekenen en het certificaat kan retourneren. Het tweede bestand heet `cert.pem` en is de geheime sleutel voor het certificaat. Deze dient zorgvuldig beschermd te worden. Als de geheime sleutel in de handen van anderen valt kan die gebruikt worden om de identiteit van de eigenaar (of server) aan te nemen.

In gevallen waar ondertekening door een CA niet vereist is, kan een zelfondertekend certificaat gemaakt worden. Maak als eerste de RSA sleutel:

`#` `openssl dsaparam -rand -genkey -out `myRSA.key` 1024`

Hierna kan de CA sleutel gemaakt worden:

`#` `openssl gendsa -des3 -out `myca.key` `myRSA.key``

Deze sleutel kan gebruikt worden om een certificaat te maken:

`#` `openssl req -new -x509 -days 365 -key `myca.key` -out `new.crt``

Er zouden nu twee bestanden bijgekomen moeten zijn in de map: een certificaatautoriteit ondertekeningsbestand `myca.key` en `new.crt`, het certificaat zelf. Deze moeten in een map geplaatst worden, bij voorkeur onder `/etc` waar alleen `root` kan lezen. De rechten 0700 zijn hier prima en die kunnen ingesteld worden met `chmod`.

### 15.8.2. Certificaten gebruiken: een voorbeeld

En wat kunnen deze bestanden? Een prima toepassing zou het versleutelen van verbindingen naar de Sendmail MTA kunnen zijn. Daardoor zouden gebruikers niet langer platte tekst hoeven te autenticeren om mail te sturen via de lokale MTA.

### Opmerking:

Dit is niet de best denkbare toepassing omdat sommige MUA's de gebruiker een foutmelding geven als ze het certificaat niet lokaal geïnstalleerd hebben. De documentatie bij de software geeft meer informatie over het installeren van certificaten.

De volgende regels moeten opgenomen worden in het lokale `.mc` bestand:

dnl SSL Options define(`confCACERT_PATH',`/etc/certs')dnl define(`confCACERT',`/etc/certs/new.crt')dnl define(`confSERVER_CERT',`/etc/certs/new.crt')dnl define(`confSERVER_KEY',`/etc/certs/myca.key')dnl define(`confTLS_SRV_OPTIONS', `V')dnl

`/etc/certs/` is de map die gebruikt wordt voor het lokaal opslaan van certificaten en sleutels. De laatste voorwaarde het is opnieuw aanmaken van het lokale `.cf` bestand. Dit gaat door eenvoudigweg `make `install`` te typen in de map `/etc/mail`. Laat dat volgen door `make `install`` waardoor de daemon Sendmail herstart zou moeten worden.

Als alles goed is gegaan, dan staan er geen foutmeldingen `/var/log/maillog` en is Sendmail zichtbaar in de proceslijst.

Maak als eenvoudige test een verbinding met de mailserver met telnet(1):

`#` `telnet `example.com` 25` Trying 192.0.34.166... Connected to `example.com`. Escape character is '^]'. 220 `example.com` ESMTP Sendmail 8.12.10/8.12.10; Tue, 31 Aug 2004 03:41:22 -0400 (EDT) `ehlo `example.com`` 250-example.com Hello example.com [192.0.34.166], pleased to meet you 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-8BITMIME 250-SIZE 250-DSN 250-ETRN 250-AUTH LOGIN PLAIN 250-STARTTLS 250-DELIVERBY 250 HELP `quit` 221 2.0.0 `example.com` closing connection Connection closed by foreign host.

Als de regel “STARTTLS” verschijnt in de uitvoer dan werkt alles correct.

Terug | Omhoog | Volgende
15.7. Kerberos5 | Begin | 15.9. VPN via IPsec