Требования:
Центр сертификации (Certificate authority) состоит всего из 2 компонентов:
Этапы создания CA:
openssl genrsa -out ca.key 2048
openssl req -key ca.key -new -out ca.csr
openssl x509 -signkey ca.key -in ca.csr -req -days 365 -out ca.crt
Как видите ничего особо сложного, но можно сделать намного проще, эти 3 действия можно выполнить всего 1 командой, именно так мы и поступим.
Для начала перейдите в домашнюю директорию пользователя:
cd
Организацию CA начнем со следующей команды:
openssl req -newkey rsa:4096 -nodes -keyout ca.key -x509 -days 365 -out ca.crt
Далее начнется интерактивный ввод параметров, заполните его следующим образом:
Generating a RSA private key
.................+++++
.............................................................+++++
writing new private key to 'ca.key'
-----
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) [RU]:
State or Province Name (full name) []: RU-BA
Locality Name (eg, city) []: UFA
Organization Name (eg, company) []: URKTB
Organizational Unit Name (eg, section) []: 308
Common Name (e.g., your name or your server's hostname) []: AU-Team CA
Email Address []:
Теперь мы имеем закрытый ключ, и сам сертификат (файла csr при этом не будет)
[root@hq-srv ~]# ls -l
total 12
-rw-r--r-- 1 root root 1159 Feb 28 15:57 ca.crt
-rw------- 1 root root 1708 Feb 28 15:56 ca.key
Создаем закрытый ключ:
openssl genrsa -out web.key 4096
Запрос на подпись:
openssl req -key web.key -new -out web.csr
Здесь так же начнется ввод параметров:
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]: RU
State or Province Name (full name) [Some-State]: RU-BA
Locality Name (eg, city) []: UFA
Organization Name (eg, company) [Internet Widgits Pty Ltd]: UKRTB
Organizational Unit Name (eg, section) []:308
Common Name (e.g. server FQDN or YOUR name) []:*.au-team.irpo
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Мы использовали wildcard домен *.au-team.irpo, чтобы не генерировать сертификаты отдельно под wiki и moodle.
Создайте файл openssl.cnf:
[req]
req_extensions = req_ext
[req_ext]
#Эту строку указывать необязательно, так как Common Name сертификата wildcard
subjectAltName = DNS:wiki.au-team.irpo, DNS:moodle.au-team.irpo
extendedKeyUsage = serverAuth
keyUsage = digitalSignature
Этот файл указывает, что сертификат можно будет использовать для создания TLS на веб-сервере
Теперь подписываем этот запрос через наш CA:
openssl x509 -req -in web.csr -CA ca.crt -CAkey ca.key -CAcreateserial \
-out web.crt -days 365 -sha256 -extfile openssl.cnf -extensions req_ext
И того получаем:
[root@hq-srv ~]# ls -l
total 24
-rw-r--r-- 1 root root 1159 Feb 28 15:57 ca.crt
-rw------- 1 root root 1159 Feb 28 15:57 ca.key
-rw-r--r-- 1 root root 1159 Feb 28 15:57 ca.srl
-rw-r--r-- 1 root root 1159 Feb 28 15:57 web.crt
-rw-r--r-- 1 root root 1159 Feb 28 15:57 web.csr
-rw------- 1 root root 1159 Feb 28 15:57 web.key
Теперь осталось 2 задачи:
Нам нужно закинуть web.crt и web.key на BR-SRV, где у нас находится Nginx, для этого выполняем:
scp -P 2024 web.crt sshuser@192.168.20.2:/home/sshuser
scp -P 2024 web.key sshuser@192.168.20.2:/home/sshuser
Затем на самом BR-SRV перенесем эти файлы в директорию /etc/nginx
mv /home/sshuser/web.crt /etc/nginx
mv /home/sshuser/web.key /etc/nginx
Теперь изменим конфиг /etc/nginx/sites-available.d/default.conf:
upstream moodle.au-team.irpo {
server 192.168.10.2;
}
upstream wiki.au-team.irpo {
server 192.168.20.2:8080;
}
#MOODLE
server {
listen 80;
server_name moodle.au-team.irpo;
return 301 https://$host;
}
server {
listen 443 ssl;
server_name moodle.au-team.irpo;
ssl_certificate /etc/nginx/web.crt;
ssl_certificate_key /etc/nginx/web.key;
location / {
proxy_pass http://moodle.au-team.irpo;
}
}
#MEDIAWIKI
server {
listen 80;
server_name wiki.au-team.irpo;
return 301 https://$host;
}
server {
listen 443 ssl;
server_name wiki.au-team.irpo;
ssl_certificate /etc/nginx/web.crt;
ssl_certificate_key /etc/nginx/web.key;
location / {
proxy_pass http://wiki.au-team.irpo;
}
}
После чего проверьте конфигурацию на ошибки:
nginx -t
Если все в порядке перезагрузите веб-сервер:
systemctl restart nginx
Чтобы при заходе на наши веб-сервисы был HTTPS, нужно чтобы HQ-CLI доверял нашему CA. Для этого нужно установить корневой сертификат CA ca.crt в качестве доверенного на HQ-CLI.
С HQ-SRV скопируйте ca.crt на HQ-CLI:
scp ca.crt user@192.168.10.66:/home/user
На самом HQ-CLI переместите сертификат в директорию /etc/pki/ca-trust/source/anchors:
mv /home/user/ca.crt /etc/pki/ca-trust/source/anchors/
А потом выполните команду:
update-ca-trust
Полностью перезапустите браузер и зайдите на веб-ресурсы по доменным именам. У вас должен висеть замочек “Защищенное соединение”.
Если возникли проблемы проверьте доверяет ли HQ-CLI вашему CA:
trust list | grep 'AU-Team CA'
Так же можете проверить сам сертификат:
openssl x509 -in web.crt -text -noout | less
Там должны быть расширения (X509v3 extensions):