This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
пакет_openssl [2023/12/25 08:06] val [Создание запроса на сертификат] |
пакет_openssl [2024/05/02 14:45] val [Интерактивное подключение по ssl] |
||
---|---|---|---|
Line 17: | Line 17: | ||
$ openssl s_client -connect ru.wikipedia.org:443 | $ openssl s_client -connect ru.wikipedia.org:443 | ||
- | $ openssl s_client -CApath /etc/ssl/certs/ -showcerts -connect student.bmstu.ru:443 | + | $ openssl s_client -showcerts -connect webinar6.bmstu.ru:443 2>/dev/null | openssl x509 -noout -dates #-text | grep bmstu |
- | $ openssl s_client -showcerts -connect webinar6.bmstu.ru:443 2>/dev/null | openssl x509 -noout -dates | + | $ faketime -f "+500d" wget -q -O /dev/null https://webinar7.bmstu.ru && echo Ok || echo Err |
- | $ faketime -f "+500d" ... | + | $ openssl s_client -starttls smtp -crlf -connect mailhub.bmstu.ru:25 |
- | + | $ openssl s_client -starttls smtp -crlf -nocommands server.corp13.un:25 | |
- | $ openssl s_client -CApath /etc/ssl/certs/ -starttls smtp -crlf -connect mailhub.bmstu.ru:25 | + | |
$ openssl s_client -cert user1.crt -key user1.key -connect www.corpX.un:443 | $ openssl s_client -cert user1.crt -key user1.key -connect www.corpX.un:443 | ||
Line 46: | Line 45: | ||
==== Создание пары приватный/публичный ключ ==== | ==== Создание пары приватный/публичный ключ ==== | ||
<code> | <code> | ||
+ | student@lan:~$ | ||
user1@server:~$ openssl genrsa 2048 > key.private | user1@server:~$ openssl genrsa 2048 > key.private | ||
Line 51: | Line 51: | ||
user1@server:~$ scp key.public user2@www: | user1@server:~$ scp key.public user2@www: | ||
+ | student@lan:~$ ftp-upload -h server -u student --password xxxxxxxx -v key.public | ||
</code> | </code> | ||
+ | * [[Сервис FTP#Команды ftp клиента]] | ||
==== Шифрование данных ==== | ==== Шифрование данных ==== | ||
<code> | <code> | ||
+ | student@server:~$ openssl pkeyutl -encrypt -inkey key.public -pubin < data.txt > data.enc | ||
user2@www:~$ openssl rsautl -encrypt -inkey key.public -pubin < data.txt > data.enc | user2@www:~$ openssl rsautl -encrypt -inkey key.public -pubin < data.txt > data.enc | ||
user2@www:~$ scp data.enc user1@server: | user2@www:~$ scp data.enc user1@server: | ||
+ | student@lan:~$ curl -v -o data.enc ftp://student:xxxxxxxx@server/data.enc | ||
+ | student@lan:~$ openssl pkeyutl -decrypt -inkey key.private < data.enc | tee data.txt | ||
user1@server:~$ openssl rsautl -decrypt -inkey key.private < data.enc > data.txt | user1@server:~$ openssl rsautl -decrypt -inkey key.private < data.enc > data.txt | ||
</code> | </code> | ||
Line 64: | Line 69: | ||
==== Цифровая подпись ==== | ==== Цифровая подпись ==== | ||
<code> | <code> | ||
+ | student@lan:~$ | ||
user1@server:~$ openssl dgst -sha256 -sign key.private -out data.sign data.txt | user1@server:~$ openssl dgst -sha256 -sign key.private -out data.sign data.txt | ||
user1@server:~$ scp data.* user2@www: | user1@server:~$ scp data.* user2@www: | ||
+ | student@lan:~$ ftp-upload -h server -u student --password password -v data* | ||
+ | student@server:~$ | ||
user2@www:~$ openssl dgst -sha256 -verify key.public -signature data.sign data.txt | user2@www:~$ openssl dgst -sha256 -verify key.public -signature data.sign data.txt | ||
</code> | </code> | ||
Line 79: | Line 87: | ||
===== Создание самоподписанного сертификата ===== | ===== Создание самоподписанного сертификата ===== | ||
+ | * *.corpX.un для wild card сертификата | ||
==== Создание приватного ключа ==== | ==== Создание приватного ключа ==== | ||
<code> | <code> | ||
server# openssl genrsa -out server.key 2048 | server# openssl genrsa -out server.key 2048 | ||
- | server# chmod 400 server.key | + | server# ###chmod 400 server.key |
</code> | </code> | ||
==== Создание сертификата ==== | ==== Создание сертификата ==== | ||
<code> | <code> | ||
- | server# openssl req -new -x509 -days 3650 -key server.key -out server.crt -addext "subjectAltName=DNS:server.corpX.un" | + | server# openssl req -new -x509 -days 3650 -key server.key -out server.crt -addext 'subjectAltName=DNS:server.corpX.un' |
</code><code> | </code><code> | ||
... | ... | ||
Line 100: | Line 109: | ||
</code> | </code> | ||
+ | ИЛИ | ||
+ | |||
+ | <code> | ||
+ | openssl req -new -x509 -days 3650 -key wild.key -out wild.crt -subj '/CN=*.corpX.un/O=CKO/C=RU' -addext 'subjectAltName=DNS:*.corpX.un' | ||
+ | </code> | ||
==== Просмотр содержимого файла сертификата ==== | ==== Просмотр содержимого файла сертификата ==== | ||
<code> | <code> | ||
Line 138: | Line 152: | ||
# wget -O - https://www.corpX.un | # wget -O - https://www.corpX.un | ||
+ | </code> | ||
+ | |||
+ | ==== CentOS/AlmaLinux ==== | ||
+ | <code> | ||
+ | # yum install ca-certificates | ||
+ | |||
+ | # update-ca-trust force-enable | ||
+ | |||
+ | # wget http://lan.corp13.un/ca.crt | ||
+ | |||
+ | # cp ca.crt /etc/pki/ca-trust/source/anchors/ | ||
+ | |||
+ | # update-ca-trust extract | ||
+ | |||
+ | # wget -O - https://www.corp13.un | ||
</code> | </code> | ||
===== Удаление сертификата центра сертификации ===== | ===== Удаление сертификата центра сертификации ===== | ||
<code> | <code> | ||
- | server# /usr/local/share/ca-certificates/corpX-PDC-CA.crt | + | server# rm /usr/local/share/ca-certificates/corpX-PDC-CA.crt |
server# rm /etc/ssl/certs/corpX-PDC-CA.pem | server# rm /etc/ssl/certs/corpX-PDC-CA.pem | ||
Line 153: | Line 182: | ||
* [[http://www.opennet.ru/base/sec/ssl_cert.txt.html|Авторизация с помощью клиентских SSL сертификатов]] | * [[http://www.opennet.ru/base/sec/ssl_cert.txt.html|Авторизация с помощью клиентских SSL сертификатов]] | ||
* [[https://arminreiter.com/2022/01/create-your-own-certificate-authority-ca-using-openssl/|Create your own Certificate Authority (CA) using OpenSSL]] | * [[https://arminreiter.com/2022/01/create-your-own-certificate-authority-ca-using-openssl/|Create your own Certificate Authority (CA) using OpenSSL]] | ||
+ | * [[https://www.golinuxcloud.com/openssl-ca-vs-openssl-x509-comparison/|openssl ca vs openssl x509 comparison]] | ||
==== Зачем может понадобиться свой УЦ? ==== | ==== Зачем может понадобиться свой УЦ? ==== | ||
Line 162: | Line 192: | ||
==== Настройка атрибутов базы CA в конфигурации ssl ==== | ==== Настройка атрибутов базы CA в конфигурации ssl ==== | ||
+ | |||
+ | * [[https://unix.stackexchange.com/questions/313216/openssl-sign-requests-with-extensions|OpenSSL sign requests with extensions]] | ||
+ | |||
<code> | <code> | ||
lan# cat /etc/ssl/openssl.cnf | lan# cat /etc/ssl/openssl.cnf | ||
Line 167: | Line 200: | ||
... | ... | ||
[ CA_default ] | [ CA_default ] | ||
- | ... | ||
- | dir = /root/CA | ||
+ | dir = /root/CA | ||
+ | ... | ||
+ | #unique_subject = no | ||
+ | ... | ||
+ | copy_extensions = copy | ||
+ | ... | ||
certificate = /var/www/html/ca.crt | certificate = /var/www/html/ca.crt | ||
- | |||
crl = /var/www/html/ca.crl | crl = /var/www/html/ca.crl | ||
- | |||
private_key = $dir/ca.key | private_key = $dir/ca.key | ||
+ | |||
+ | [ policy_match ] | ||
... | ... | ||
</code><code> | </code><code> | ||
cd | cd | ||
+ | mkdir -p /var/www/html/ | ||
mkdir CA | mkdir CA | ||
mkdir CA/certs | mkdir CA/certs | ||
Line 235: | Line 273: | ||
<code> | <code> | ||
www# openssl genrsa -out www.key 2048 | www# openssl genrsa -out www.key 2048 | ||
- | www# chmod 400 www.key | ||
</code> | </code> | ||
==== Создание запроса на сертификат ==== | ==== Создание запроса на сертификат ==== | ||
+ | |||
+ | * *.corpX.un для wild card сертификата | ||
+ | |||
<code> | <code> | ||
lan# scp /etc/ssl/openssl.cnf www:/etc/ssl/ | lan# scp /etc/ssl/openssl.cnf www:/etc/ssl/ | ||
Line 249: | Line 289: | ||
</code> | </code> | ||
+ | === Добавление расширений в запрос на сертификат === | ||
+ | |||
+ | <code> | ||
+ | # cat /etc/ssl/openssl.cnf | ||
+ | </code><code> | ||
+ | ... | ||
+ | [ req ] | ||
+ | ... | ||
+ | req_extensions = v3_req | ||
+ | |||
+ | [ req_distinguished_name ] | ||
+ | ... | ||
+ | [ v3_req ] | ||
+ | ... | ||
+ | subjectAltName = @alt_names | ||
+ | |||
+ | [ alt_names ] | ||
+ | DNS.1 = corpX.un | ||
+ | DNS.2 = www.corpX.un | ||
+ | #DNS.1 = *.corpX.un | ||
+ | </code> | ||
==== Передача и просмотр содержимого запроса на сертификат ==== | ==== Передача и просмотр содержимого запроса на сертификат ==== | ||
<code> | <code> | ||
Line 263: | Line 324: | ||
lan# ls CA/newcerts/ | lan# ls CA/newcerts/ | ||
+ | </code> | ||
+ | |||
+ | === Добавление расширений при подписи запроса на сертификат === | ||
+ | |||
+ | <code> | ||
+ | # cat www.ext | ||
+ | </code><code> | ||
+ | subjectAltName = @alt_names | ||
+ | [alt_names] | ||
+ | DNS.1 = corpX.un | ||
+ | DNS.2 = www.corpX.un | ||
+ | #DNS.1 = *.corpX.un | ||
+ | </code><code> | ||
+ | lan# openssl ca ... -extfile www.ext | ||
</code> | </code> | ||
Line 290: | Line 365: | ||
</code> | </code> | ||
- | ==== Добавление атрибутов в сертификат ==== | ||
- | * На примере subjectAltName. Оказался, нужным для Spark клиента и, вероятно, нужен Chrome | ||
- | * [[https://www.endpoint.com/blog/2014/10/30/openssl-csr-with-alternative-names-one|OpenSSL CSR with Alternative Names one-line]] | ||
- | |||
- | <code> | ||
- | # cat /etc/ssl/openssl.cnf | ||
- | </code><code> | ||
- | ... | ||
- | [ req ] | ||
- | ... | ||
- | req_extensions = v3_req | ||
- | ... | ||
- | [ v3_req ] | ||
- | |||
- | # Extensions to add to a certificate request | ||
- | |||
- | #basicConstraints = CA:FALSE | ||
- | #keyUsage = nonRepudiation, digitalSignature, keyEncipherment | ||
- | subjectAltName = @alt_names | ||
- | |||
- | [ alt_names ] | ||
- | DNS.1 = corpX.un | ||
- | DNS.2 = server.corpX.un | ||
- | ... | ||
- | </code> | ||
===== Создание пользовательского сертификата, подписанного CA ===== | ===== Создание пользовательского сертификата, подписанного CA ===== |