Sertifikater er en viktig byggestein for mange nettverkstjenester, bygget på kryptografiske protokoller, når de trenger en slags sentral autentisering.
Blant disse protokollene, ble SSL (Secure Socket Layer) oppfunnet av Netscape for å sikre tilkoblinger til nettjenere. Det ble senere standardisert av IETF under forkortelsen TLS (Transport Layer Security). Siden da har TLS fortsatt å utvikle seg, og i dag er SSL foreldet fordi det er oppdaget en rekke designfeil.
TLS-protokollen tar primært sikte på å gi personvern og dataintegritet mellom to eller flere kommuniserende dataprogrammer. Det vanligste tilfellet på Internett er kommunikasjonen mellom en klient (for eksempel en nettleser) og en tjener.
En nøkkelpar er nødvendig for å utveksle info, noe som involverer en offentlig nøkkel som omfatter info om eierens identiteten og samsvarer med en privat nøkkel. Den private nøkkelen må holdes hemmelig, fordi den er nøkkelen til sikkerheten. Imidlertid kan hvem som helst lage et nøkkelpar, lagre en hvilken som helst identitet på den, og gi seg ut for å være en av disse. En løsning innebærer konseptet med en sertifiseringsmyndighet (CA), formalisert av X.509-standarden. Dette konseptet omfatter en enhet som har et pålitelig nøkkelpar kjent som et rotsertifikat. Dette sertifikatet er kun brukt til å signere andre sertifikater (nøkkelpar) etter at riktige skritt er blitt tatt for å sjekke identiteten som er lagret i nøkkelparet. Programmer som bruker X.509 kan da sjekke sertifikatene som blir presentert for dem, hvis de kjenner de tiltrodde rotsertifikatene.
Du kan implementere en CA (som beskrevet i
Seksjon 10.2.2, «Offentlig nøkkel-infrastruktur: easy-rsa»), men hvis du har tenkt å bruke sertifikatet for et nettsted, må du stole på en klarert CA. Prisene varierer betydelig, men det er mulig å implementere god sikkerhet som koster lite eller ingen penger.
10.2.1. Gratis oppretting av tiltrodde sertifikater
Mange programmer oppretter og bruker som forvalg humbug-sertifikater (sjekk sidefeltet
SIKKERHET «Slangeolje»-SSL-sertifikater). Heldigvis gir
certbot-pakken alt vi trenger for å lage våre egne pålitelige sertifikater, levert av «Let's Encrypt»-initiativet (sjekk sidefeltet
KULTUR Let's Encrypt-initiativet), som også kan brukes som agenter for e-posttransport (Postfix), e-postleveringsagenter (Dovecot, Cyrus, og så videre), (og andre nettverkstjenster).
Falcot-administratorene vil bare lage et sertifikat for deres nettside, som kjører på Apache. Det finnes et praktisk Apache-programtillegg for certbot som automatisk redigerer Apache-oppsettet for å vertstjene det benyttede sertifikatet, slik at de gjør bruk av det:
#
apt install python3-certbot-apache
[...]
#
certbot --apache
saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Enter email address (used for urgent renewal and security notices)
(Enter 'c' to cancel):
admin@falcot.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o:
Y
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o:
N
Account registered.
No names were found in your configuration files. Please enter in your domain
name(s) (comma and/or space separated) (Enter 'c' to cancel):
falcot.com
Requesting a certificate for falcot.com
Performing the following challenges:
http-01 challenge for falcot.com
Enabled Apache rewrite module
Waiting for verification...
Cleaning up challenges
Created an SSL vhost at /etc/apache2/sites-available/000-default-le-ssl.conf
Enabled Apache socache_shmcb module
Enabled Apache ssl module
Deploying Certificate to VirtualHost /etc/apache2/sites-available/000-default-le-ssl.conf
Enabling available site: /etc/apache2/sites-available/000-default-le-ssl.conf
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):
2
Enabled Apache rewrite module
Redirecting vhost in /etc/apache2/sites-enabled/000-default.conf to ssl vhost in /etc/apache2/sites-available/000-default-le-ssl.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://falcot.com
You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=falcot.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/falcot.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/falcot.com/privkey.pem
Your cert will expire on 2022-06-04. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the "certonly" option. To non-interactively renew *all* of
your certificates, run "certbot renew"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Hvis du heller vil holde tjeneren i gang under opprettelsen av sertifikatet, kan du bruke webroot-programtillegget til å hente sertifikatet med argumentene certonly
og --webroot
. Du må angi en --webroot-bane
(forkortet -w
), som skal inneholde filene som skal til. Kommandoen ser slik ut:
#
certbot certonly --webroot -w /var/www/html -d www.DOMAIN.com -d DOMAIN.com
Du må starte alle tjenester på nytt ved hjelp av sertifikatene du har opprettet.
Sertifikatene som er opprettet, kalles korttidssertifikater, som er gyldige i 90 dager og må derfor fornyes innenfor en tremånedersperiode ved hjelp av kommandoen certbot renew
. Vi bør imidlertid ikke fornye hvert sertifikat manuelt, men automatisk. En grunnleggende cron-jobb er inkludert av certbot i /etc/cron.d/certbot
. For å sikre at sertifikater kan fornyes automatisk, kan du utføre certbot renew --dry-run
.
10.2.2. Offentlig nøkkel-infrastruktur: easy-rsa
Det er også mulig å lage vår egen CA. Til det vil vi bruke RSA-algoritmen som er mye brukt i offentlig-nøkkel -kryptografi. Det innebærer et «nøkkelpar», som består av en privat og en offentlig nøkkel. De to nøklene er nært knyttet til hverandre, og deres matematiske egenskaper er slik at en melding som er kryptert med den offentlige nøkkelen, kun kan dekrypteres av en person som kjenner den private, noe som sørger for konfidensialitet. I motsatt retning kan en melding kryptert med den private nøkkelen dekrypteres ved at noen kjenner den offentlige nøkkelen, noe som gjør det mulig å autentisere opprinnelsen til en melding siden bare noen med tilgang til den private nøkkelen kan generere den. Når den er knyttet til en digital sjekksumfunksjon (MD5, SHA-1, eller en nyere variant), fører dette til en signaturmekanisme som kan brukes til en hvilken som helst melding.
Siden offentlig tilgjengelige CA-er kun utsteder sertifikater i bytte for en (heftig) avgift, er det også mulig å opprette en privat sertifiseringsinstans i selskapet. easy-rsa-pakken inneholder verktøy for å tjene som en X.509 infrastruktur for sertifisering, implementert som et skriptsett som bruker openssl
-kommandoen.
Falcot Corp-administratorene bruker dette verktøyet for å lage de nødvendige sertifikater, både for serveren og klientene. Dette tillater at oppsettet av alle klienter er lik siden de bare må settes opp til å stole på sertifikater fra Falcots lokale CA. Dette CA-et er det første som må lages; til dette formålet, setter administratorene opp en katalog med filene som kreves for CA-et på et passende sted, fortrinnsvis på en maskin som ikke er koblet til nettverket for å redusere risikoen for at CAs private nøkkel blir stjålet.
$
make-cadir pki-falcot
$
cd pki-falcot
Deretter lagrer de nødvendige parameterne i filen vars
, som kan være ukommentert og redigert:
$
grep EASYRSA vars
if [ -z "$EASYRSA_CALLER" ]; then
# easyrsa. More specific variables for specific files (e.g., EASYRSA_SSL_CONF)
#set_var EASYRSA "${0%/*}"
#set_var EASYRSA_OPENSSL "openssl"
#set_var EASYRSA_OPENSSL "C:/Program Files/OpenSSL-Win32/bin/openssl.exe"
#set_var EASYRSA_PKI "$PWD/pki"
#set_var EASYRSA_TEMP_DIR "$EASYRSA_PKI"
#set_var EASYRSA_DN "cn_only"
set_var EASYRSA_REQ_COUNTRY "FR"
set_var EASYRSA_REQ_PROVINCE "Loire"
set_var EASYRSA_REQ_CITY "Saint-Étienne"
set_var EASYRSA_REQ_ORG "Falcot Corp"
set_var EASYRSA_REQ_EMAIL "admin@falcot.com"
set_var EASYRSA_REQ_OU "Certificate authority"
#set_var EASYRSA_KEY_SIZE 2048
#set_var EASYRSA_ALGO rsa
#set_var EASYRSA_CURVE secp384r1
#set_var EASYRSA_CA_EXPIRE 3650
#set_var EASYRSA_CERT_EXPIRE 825
#set_var EASYRSA_CRL_DAYS 180
#set_var EASYRSA_CERT_RENEW 30
#set_var EASYRSA_RAND_SN "yes"
#set_var EASYRSA_NS_SUPPORT "no"
#set_var EASYRSA_NS_COMMENT "Easy-RSA Generated Certificate"
#set_var EASYRSA_TEMP_FILE "$EASYRSA_PKI/extensions.temp"
# when undefined here, default behaviour is to look in $EASYRSA_PKI first, then
# fallback to $EASYRSA for the 'x509-types' dir. You may override this
#set_var EASYRSA_EXT_DIR "$EASYRSA/x509-types"
#set_var EASYRSA_KDC_REALM "CHANGEME.EXAMPLE.COM"
# EASYRSA_PKI or EASYRSA dir (in that order.) NOTE that this file is Easy-RSA
#set_var EASYRSA_SSL_CONF "$EASYRSA/openssl-easyrsa.cnf"
#set_var EASYRSA_REQ_CN "ChangeMe"
#set_var EASYRSA_DIGEST "sha256"
#set_var EASYRSA_BATCH ""
$
vim vars
$
Nå forbereder vi offentlig-nøkkel-infrastrukturkatalogen med følgende kommando:
$
./easyrsa init-pki
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /home/debian/pki-falcot/pki
Det neste trinnet er å opprette selve ca-nøkkelparet (de to delene av nøkkelparet vil bli lagret under pki/ca.crt
og pki/private/ca.key
i dette trinnet). Vi kan legge til alternativet nopass
for å unngå å skrive inn et passord hver gang den private nøkkelen brukes:
$
./easyrsa build-ca nopass
Using SSL: openssl OpenSSL 1.1.1k 25 Mar 2021
Generating RSA private key, 2048 bit long modulus (2 primes)
..................+++++
...............................+++++
e is 65537 (0x010001)
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.
-----
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:
CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/home/debian/pki-falcot/pki/ca.crt
Sertifikatet kan nå opprettes, samt Diffie-Hellman-parameterne som kreves på tjenersiden av en SSL/TLS-tilkobling. De ønsker å bruke det for en VPN-tjener (se avsnittet
Seksjon 10.3, «Privat virtuelt nettverk») som er identifisert av DNS-navnet
vpn.falcot.com
; Dette navnet brukes på nytt for de genererte nøkkelfilene (
keys/vpn.falcot.com.crt
for det offentlige sertifikatet, og
keys/vpn.falcot.com.key
for den private nøkkelen):
$
./easyrsa gen-req vpn.falcot.com nopass
Using SSL: openssl OpenSSL 1.1.1k 25 Mar 2021
Generating a RSA private key
......................................+++++
..........................................................................+++++
writing new private key to '/home/debian/pki-falcot/pki/easy-rsa-5515.0PwyXl/tmp.g1c6u6'
-----
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.
-----
Common Name (eg: your user, host, or server name) [vpn.falcot.com]:
Keypair and certificate request completed. Your files are:
req: /home/debian/pki-falcot/pki/reqs/vpn.falcot.com.req
key: /home/debian/pki-falcot/pki/private/vpn.falcot.com.key
$
./easyrsa sign-req server vpn.falcot.com
Using SSL: openssl OpenSSL 1.1.1k 25 Mar 2021
You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.
Request subject, to be signed as a server certificate for 825 days:
subject=
commonName = vpn.falcot.com
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
Using configuration from /home/debian/pki-falcot/pki/easy-rsa-5603.87iCIa/tmp.u8r8Fj
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'vpn.falcot.com'
Certificate is to be certified until May 27 15:26:29 2024 GMT (825 days)
Write out database with 1 new entries
Data Base Updated
Certificate created at: /home/debian/pki-falcot/pki/issued/vpn.falcot.com.crt
$
./easyrsa gen-dh
Using SSL: openssl OpenSSL 1.1.1k 25 Mar 2021
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
[…]
DH parameters of size 2048 created at /home/debian/pki-falcot/pki/dh.pem
Det neste trinnet oppretter sertifikater for VPN-klienter; ett sertifikat kreves for hver datamaskin eller person som får lov å bruke VPN-en:
$
./easyrsa build-client-full JoeSmith nopass
Using SSL: openssl OpenSSL 1.1.1k 25 Mar 2021
Generating a RSA private key
...................................+++++
.........................................................................................+++++
writing new private key to '/home/debian/pki-falcot/pki/easy-rsa-5694.DOYwSn/tmp.RKlbOE'
-----
Using configuration from /home/debian/pki-falcot/pki/easy-rsa-5694.DOYwSn/tmp.d5QHAC
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'JoeSmith'
Certificate is to be certified until May 27 15:29:25 2024 GMT (825 days)
Write out database with 1 new entries
Data Base Updated