---
title: 'PKI för avancerade användare'
url: 'https://tucek.me/sv/tech/servers/ca/pki'
markdown: 'https://tucek.me/sv/tech/servers/ca/pki.md'
lang: sv
date: '2026-08-30'
description: 'Vi använder certifikatservern för att skapa certifikat och möjliggöra säker anslutning mellan alla våra servrar och tjänster. Vi behöver inte stora resurser för CA-servern. Jag har valt 1 Gb RAM, en CPU och en hårddisk på 10 Gb, men vi kan köra den med 512 Mb RAM och 3 Gb hårddiskutrymme. sudo virt…'
---

# PKI för avancerade användare

Vi använder certifikatservern för att skapa certifikat och möjliggöra säker anslutning mellan alla våra servrar och tjänster. Vi behöver inte stora resurser för CA-servern. Jag har valt 1 Gb RAM, en CPU och en hårddisk på 10 Gb, men vi kan köra den med 512 Mb RAM och 3 Gb hårddiskutrymme.

```command
sudo virt-install --virt-type kvm --name ca \
  --location \
  https://deb.debian.org/debian/dists/bullseye/main/installer-amd64/ \
  --memory 1024 \
  --vcpus 1 \
  --disk pool=vmdisks,size=10,format=qcow2 \
  --network bridge=br0 \
  --hvm \
  --graphics none \
  --console pty,target_type=serial \
  --extra-args "console=ttyS0"
```

## Konfigurera Debian

Redigera `nano /etc/network/interfaces` och ställa in en statisk IP-adress:

```setting
source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
allow-hotplug ens2
iface ens2 inet static
  address 10.115.100.3/24
  gateway 10.115.100.1
```

`sudo nano /etc/resolv.conf`

```setting
search yourdomain.com
nameserver 1.1.1.1
```

Ställ in systemspråket på engelska för att göra det lättare att upptäcka problem i loggfilerna:

```command
apt install locales-all
localectl set-locale LANG=en_US.utf8
localectl status
```

### Uppdatera Debian och installera de nödvändiga administrationsverktygen

```commands
apt update
apt install wget sudo screen nmap telnet tcpdump rsync net-tools dnsutils htop \
apt-transport-https vim gnupg lsb-release
```

Skapa `nano /etc/sudoers.d/10-nopasswd` och lägg till

```setting
%emir ALL=(ALL) NOPASSWD: ALL
```

### Konfigurera VIM

Öppna `nano /etc/vim/vimrc` och ersätt hela innehållet med:

```setting
runtime! debian.vim
syntax on
set background=dark
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
filetype plugin indent on
set encoding=utf-8
set nobackup
set nowritebackup
set showcmd
set updatetime=300
set showmatch
set ignorecase
set smartcase
set incsearch
set tabstop=2
set softtabstop=2
set shiftwidth=2
set expandtab
if filereadable("/etc/vim/vimrc.local")
  source /etc/vim/vimrc.local
endif
```

Skapa en konfigurationsfil för Vim för användare `nano ~/.vimrc` och lägg till:

```setting
set mouse=
set nocompatible
set cursorline
set nocursorcolumn
set nowrap
set showmode
set hlsearch
set wildmenu
set wildmode=list:longest
set wildignore=*.docx,*.jpg,*.png,*.gif,*.pdf,*.pyc,*.exe,*.flv,*.img,*.xlsx
```

Från och med nu kommer vi att använda VIM istället för nano.

## PKI

Jag kommer att guida er genom en snabb konfiguration av certifikatutfärdaren och lägga upp de nödvändiga filerna.

### Förberedelse

```command
sudo mgdir /srv/pki
sudo chown -R emir:emir /srv/pki
cd /srv/pki
```

#### Skapa mappar

```command
mkdir -p private certs csr crl certs_by_serial intermediate/certs \
intermediate/private intermediate/csr intermediate/crl \
intermediate/certs_by_serial
```

#### Skapa index.txt-filer

```command
touch index.txt intermediate/index.txt private/.rand intermediate/private/.rand
```

#### Skapa serienummerfiler för både rot- och mellanliggande certifikatutfärdare (använd valfritt fyrsiffrigt nummer)

```command
echo 1000 > serial
echo 1000 > intermediate/serial
```

#### Skapa CRL-seriefiler för både rot- och mellanliggande certifikatutfärdare (använd valfritt fyrsiffrigt nummer)

```command
echo 1000 > crlnumber
echo 1000 > intermediate/crlnumber
```

### RSA

#### Skapa rotnyckel och certifikat: (Rambler Root CA)

```command
openssl genrsa -aes256 -out private/root.key
openssl req -config openssl-root.cnf -days 14600 -new -x509 -sha512 -extensions v3_ca -key private/root.key -out root.pem
```

##### Visa certifikat

```command
openssl x509 -in root.pem -text
```

#### Skapa mellanliggande nyckel, krav och certifikat: (Rambler Intermediate CA)

```command
openssl genrsa -aes256 -out intermediate/private/intermediate.key
openssl req -config intermediate/openssl-intermediate.cnf -new -key intermediate/private/intermediate.key -out intermediate/csr/intermediate.csr
openssl ca -config openssl-root.cnf -extensions v3_intermediate_ca -days 14600 -md sha512 -in intermediate/csr/intermediate.csr -out intermediate/intermediate.crt
```

##### Skapa ett mellanliggande certifikat i PEM-format (Base64)

```command
openssl x509 -in intermediate/intermediate.crt -out intermediate/intermediate.pem
```

#### Skapa en CA-kedjefil

```command
cat intermediate/intermediate.crt root.pem > intermediate/chain.crt
```

och kedjefilen i PEM-format:

```command
cat intermediate/intermediate.pem root.pem > intermediate/chain.pem
```

#### Skapa CRL-filer

```command
openssl ca -config openssl-root.cnf -gencrl -out crl/root.crl
openssl ca -config intermediate/openssl-intermediate.cnf -gencrl -out intermediate/crl/intermediate.crl
```

### Skapa ett servercertifikat DC01

Redigera `vim intermediate/openssl-server.cnf` och ändra DNS-namnet:

```setting
[ alt_names ]
DNS.0 = dc01.yourdomain.com
DNS.1 = dc02.yourdomain.com
```

```command
openssl genrsa -aes256 -out intermediate/private/dc01.key
openssl req -config intermediate/openssl-server.cnf -new -key intermediate/private/dc01.key -out intermediate/csr/dc01.csr
openssl ca -config intermediate/openssl-server.cnf -extensions server_cert -days 10950 -in intermediate/csr/dc01.csr -out intermediate/certs/dc01.crt
sudo openssl x509 -in intermediate/certs/dc01.crt -out intermediate/certs/dc01.pem
```

#### Ta bort krypteringen från den privata nyckeln

```command
openssl rsa -in intermediate/private/dc01.key -out intermediate/private/dc01-key.pem
```

#### Kombinera certifikat/nyckel, .crt

```command
cat intermediate/certs/dc01.crt intermediate/private/dc01-key.crt > intermediate/private/dc01.crt
```

#### Kombinera certifikat/nyckel, pkcs12

```command
openssl pkcs12 -export -inkey intermediate/private/dc01-key.crt -in intermediate/certs/dc01.crt -name dc01 -out intermediate/private/dc01.pfx
```

##### utökad pkcs12

```command
openssl pkcs12 -export -inkey intermediate/private/dc01-key.crt -in intermediate/certs/dc01.crt -certfile intermediate/chain.crt -name dc01 -out intermediate/private/dc01.p12
```

##### Gör på samma sätt för DC02 och kopiera certifikaten till respektive server:

```command
scp intermediate/private/dc01-key.pem intermediate/certs/dc01.pem intermediate/chain.pem emir@dc01.yourdomain.com:
scp intermediate/private/dc02-key.pem intermediate/certs/dc02.pem intermediate/chain.pem emir@dc02.yourdomain.com:
```

#### Installera kedjecertifikatet på varje DC

```command
# on dc01 and dc02
sudo cp chain.pem /usr/local/share/ca-certificates/chain.crt
sudo update-ca-certificates
```

### Några exempel

#### Skapa ett certifikat för klientautentisering

```command
openssl genrsa -aes256 -out intermediate/private/client.key
openssl req -config intermediate/openssl-client.cnf -new -key intermediate/private/client.key -out intermediate/csr/client.csr
openssl ca -config intermediate/openssl-client.cnf -extensions client_cert -days 3650 -in intermediate/csr/client.csr -out intermediate/certs/client.crt
```

#### Ta bort krypteringen från den privata nyckeln:

```command
openssl rsa -in intermediate/private/client.key -out intermediate/private/client-key.crt
```

#### Kombinera certifikat/nyckel, .crt:

```command
cat intermediate/certs/client.crt intermediate/private/client-key.crt > intermediate/private/client.crt
```

#### Kombinera certifikat/nyckel, pkcs12:

```command
# Regular (Windows)
openssl pkcs12 -export -inkey intermediate/private/client-key.crt -in intermediate/certs/client.crt -name client -out intermediate/private/client.pfx
```

```command
# Regular (Chromebook)
cat intermediate/certs/client.crt intermediate/intermediate.crt > client-configs/keys/client.crt
openssl pkcs12 -export -inkey intermediate/private/client-key.crt -in client-configs/keys/client.crt -name client -out intermediate/private/client-cr.p12
```

```command
# Extended
openssl pkcs12 -export -inkey intermediate/private/client-key.crt -in intermediate/certs/client.crt -certfile intermediate/chain.crt -name client -out intermediate/private/client.p12
```

### OpenVPN

Utför alla åtgärder i PKI:s rotkatalog:

#### Skapa ett servercertifikat:

```command
openssl genrsa -aes256 -out private/server.key
openssl req -config intermediate/openssl-server.cnf -new -key private/server.key -out csr/server.csr
openssl ca -config openssl-server.cnf -extensions server_cert -days 10950 -in csr/server.csr -out certs/server.crt
sudo cp certs/server.crt /etc/openvpn/
```

##### Ta bort krypteringen från den privata nyckeln:

```command
openssl rsa -in private/server.key -out private/server-key.crt
sudo cp private/server-key.crt /etc/openvpn/
```

#### Skapa ett autentiseringscertifikat för en klient (arbetsplats)

```command
openssl genrsa -aes256 -out private/work.key
openssl req -config openssl-client.cnf -new -key private/work.key -out csr/work.csr
openssl ca -config openssl-client.cnf -extensions client_cert -days 3650 -in csr/work.csr -out certs/work.crt
cp certs/work.crt client-configs/keys/
```

##### Ta bort krypteringen från den privata nyckeln:

```command
openssl rsa -in private/work.key -out private/work-key.crt
cp private/work-key.crt client-configs/keys/
sudo client-configs/make_config.sh work
```

##### Kombinera certifikat/nyckel, pkcs12

```command
openssl pkcs12 -export -inkey private/work-key.crt -in certs/work.crt -name work -out private/work-cr.p12
cp private/work-cr.p12 ~/openvpn/work/
cp client-configs/files/work.ovpn ~/openvpn/work/
```

#### Skapa ett certifikat för klientautentisering

```command
openssl genrsa -aes256 -out private/client.key
openssl req -config openssl-client.cnf -new -key private/client.key -out csr/client.csr
openssl ca -config openssl-client.cnf -extensions client_cert -days 3650 -in csr/client.csr -out certs/client.crt
cp certs/client.crt client-configs/keys/
```

##### Ta bort krypteringen från den privata nyckeln:

```command
openssl rsa -in private/client.key -out private/client-key.crt
cp private/client-key.crt client-configs/keys/
sudo client-configs/make_config.sh client
```

##### Kombinera certifikat/nyckel, pkcs12:

```command
openssl pkcs12 -export -inkey private/client-key.crt -in certs/client.crt -name client -out private/client-cr.p12
cp private/client-cr.p12 ~/openvpn/client/
cp client-configs/files/client.ovpn ~/openvpn/client/
```

### Administration

```commands
# Revoke certificate
openssl ca -config intermediate/openssl-intermediate.cnf -revoke intermediate/certs/dc01.crt

# View certificate details
openssl x509 -in dc01.pem -noout -text

# Verifying the certificate (local)
openssl verify -CAfile chain.pem dc01.pem

# Veryfi certificate (remote)
openssl s_client -showcerts -connect localhost:636 -CAfile chain.pem
```

---

## Navigation

- Parent: [CA-server med Easy-RSA](https://tucek.me/sv/tech/servers/ca.md)
