You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

140 lines
6.9 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

Сводка утилит для создания сертификатов и управление ими в инфраструктуре центра сертификации
В данной статье представлены краткое описание и примеры использования нескольких полезных утилит, которые помогают автоматизировать процесс создания сертификатов и управления ими в инфраструктуре центра сертификации.
## Утилита `prepare.sh`
### Описание:
Скрипт автоматизирует процесс создания инфраструктуры центра сертификации (ЦС), включая создание директорий, генерацию ключей и сертификатов, а также настройку конфигурационных файлов для корневого и промежуточного ЦА.
### Примеры использования:
1. Запуск скрипта с правами суперпользователя:
```sh
sudo bash prepare.sh
```
## Утилита `make_server_cert.sh`
### Описание:
Генерирует серверные сертификаты для указанных доменов или IP-адресов. Скрипт создает приватный ключ, запрос на подпись сертификата (CSR) и сам сертификат.
### Примеры использования:
1. Генерация серверного сертификата для домена `example1.com` и IP-адреса `192.168.3.145`:
```sh
bash make_server_cert.sh -t 395 example1.com 192.168.3.145
```
## Утилита `make_client_cert.sh`
### Описание:
Скрипт для создания клиентских сертификатов для указанного сервера и клиента. Генерирует приватный ключ, запрос на сертификат (CSR), подписывает его и выводит информацию о сгенерированном сертификате.
### Примеры использования:
1. Генерация клиентского сертификата для домена `example1.com` и имени пользователя `user1@test.com`, действующего 365 дней:
```sh
bash make_client_cert.sh -s example1.com -c user1@test.com -d 365
```
## Утилита `make_server_revoke.sh`
### Описание:
Позволяет отозвать серверный сертификат для указанного домена или IP-адреса.
### Примеры использования:
1. Отозвать серверный сертификат для домена `brepo.ru`:
```sh
bash make_server_revoke.sh -n 1 -s brepo.ru
```
## Утилита `make_client_revoke.sh`
### Описание:
Позволяет отозвать клиентский сертификат для указанного сервера и клиента.
### Примеры использования:
1. Отозвать клиентский сертификат для домена `example1.com` и имени пользователя `user2@test.com`:
```sh
bash make_client_revoke.sh -n 1 -s example1.com -c user2@test.com
```
## Утилита `make_app_keys.sh`
### Описание:
Скрипт генерирует беспарольный приватный и публичный ключ с помощью `openssl` и сохраняет их в указанной директории. Это удобно для создания ключей, которые будут использоваться приложениями без необходимости вводить пароль при каждом использовании.
### Примеры использования:
1. Генерация ключей в директории `/etc/ssl/app_keys`:
```sh
bash make_app_keys.sh /etc/ssl/app_keys
```
После выполнения ключи будут доступны как:
- `/etc/ssl/app_keys/caapp.private.key.pem`
- `/etc/ssl/app_keys/caapp.public.key.pem`
## Еще примеры
1. Подготовка инфраструктуры ЦС и генерация серверного и клиентского сертификатов:
```sh
bash prepare.sh
bash make_server_cert.sh example1.com 192.168.5.145
bash make_client_cert.sh -s example1.com -c user1@test.com -d 365
```
2. Отозвать серверный и клиентский сертификаты (все версии):
```sh
bash make_server_revoke.sh brepo.ru
bash make_client_revoke.sh -s example1.com -c user2@test.com
```
Эти утилиты и примеры помогут вам автоматизировать процесс создания сертификатов и управления ими в инфраструктуре центра сертификации.
## Примеры настройки nginx
Как обеспечить доступ к сайту с помощью сертификатов:
Примкр настройки домена, например с репозиторием пакетов `/etc/nginx/conf.d/example1.com.conf`:
```
server {
listen 8081 ssl;
server_name example1.com www.example1.com;
root /var/www/example1.com/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
access_log /var/log/nginx/example1.com.access.log;
error_log /var/log/nginx/example1.com.error.log debug;
ssl_certificate /database/ca/intermediate/certs/example1.com.cert.pem;
ssl_certificate_key /database/ca/intermediate/private/example1.com.key.pem;
ssl_client_certificate /database/ca/intermediate/certs/ca-chain.cert.pem;
ssl_crl /database/ca/intermediate/crl/ca-full.crl.pem;
ssl_verify_client on;
keepalive_timeout 70;
fastcgi_param SSL_VERIFIED $ssl_client_verify;
fastcgi_param SSL_CLIENT_SERIAL $ssl_client_serial;
fastcgi_param SSL_CLIENT_CERT $ssl_client_cert;
fastcgi_param SSL_DN $ssl_client_s_dn;
}
```
Вызов на строне клиента:
```
curl -k --cert /database/ca/client_certs/example1.com/user2@test.com.cert.pem --key /database/ca/client_certs/example1.com/private/user2@test.com_private.key.pem https://example1.com:8081
```
Или настройка DNF репозитория для доступа к закрытому репозиторию:
```[test]
name = test
enabled = 1
sslverify = 0
gpgcheck = 1
baseurl = https://example1.com:8081
sslclientkey=/database/ca/client_certs/example1.com/private/user2@test.com_private.key.pem
sslclientcert=/database/ca/client_certs/example1.com/user2@test.com.cert.pem
sslcacert=/database/ca/intermediate/certs/ca-chain.cert.pem
```