User Tools

Site Tools


пакет_openssl

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
пакет_openssl [2023/12/25 11:01]
val [Добавление атрибутов в сертификат]
пакет_openssl [2026/02/24 16:26] (current)
val [Просмотр содержимого файла сертификата]
Line 14: Line 14:
  
 ===== Интерактивное подключение по ssl ===== ===== Интерактивное подключение по ssl =====
 +
 +  * [[Настройка терминалов]]
 +
 <​code>​ <​code>​
 $ 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+faketime ​-f "​+500d"​ wget -q -O /dev/null https://webinar7.bmstu.ru ​&& echo Ok || echo Err
  
-$ openssl s_client -showcerts ​-connect ​webinar6.bmstu.ru:443 2>/​dev/​null | openssl ​x509 -noout -dates+$ openssl s_client -starttls smtp -crlf -connect ​mailhub.bmstu.ru:25 
 +openssl ​s_client ​-connect server.corp13.un:​993 ​-crlf
  
-$ faketime -f "​+500d"​ ... +lan# openssl s_client -cert user1.crt -key user1.key -connect www.corpX.un:​443
- +
-$ 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+
 </​code><​code>​ </​code><​code>​
 GET /​cgi-bin/​test-cgi HTTP/1.1 GET /​cgi-bin/​test-cgi HTTP/1.1
 Host: www.corpX.un Host: www.corpX.un
 </​code><​code>​ </​code><​code>​
-openssl s_client -cert user1.crt -key user1.key -connect server.corpX.un:​993+lan# openssl s_client -cert user1.crt -key user1.key -connect server.corpX.un:​993
 </​code><​code>​ </​code><​code>​
 01 AUTHENTICATE EXTERNAL = 01 AUTHENTICATE EXTERNAL =
Line 46: Line 46:
 ==== Создание пары приватный/​публичный ключ ==== ==== Создание пары приватный/​публичный ключ ====
 <​code>​ <​code>​
-user1@server:​~$ openssl genrsa 2048 > key.private+$ openssl genrsa 2048 > key.private
  
-user1@server:​~$ openssl rsa -pubout < key.private > key.public +$ openssl rsa -pubout < key.private > key.public
- +
-user1@server:​~$ scp key.public user2@www:+
 </​code>​ </​code>​
  
 ==== Шифрование данных ==== ==== Шифрование данных ====
 <​code>​ <​code>​
-user2@www:~$ openssl ​rsautl ​-encrypt -inkey key.public -pubin < data.txt > data.enc +openssl3$ openssl ​pkeyutl ​-encrypt -inkey key.public -pubin < data.txt > data.enc 
- +openssl1openssl rsautl -encrypt -inkey key.public -pubin < data.txt > data.enc
-user2@www:~scp data.enc ​user1@server:​+
  
-user1@server:​~$ openssl rsautl -decrypt -inkey key.private < data.enc > data.txt+openssl3$ openssl pkeyutl -decrypt -inkey key.private < data.enc | tee data.txt 
 +openssl1$ openssl rsautl -decrypt -inkey key.private < data.enc > data.txt
 </​code>​ </​code>​
  
 ==== Цифровая подпись ==== ==== Цифровая подпись ====
 <​code>​ <​code>​
-user1@server:​~$ openssl dgst -sha256 -sign key.private -out data.sign data.txt+$ openssl dgst -sha256 -sign key.private -out data.sign data.txt
  
-user1@server:​~$ scp data.* 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>​
  
 ===== Создание параметра DH ===== ===== Создание параметра DH =====
 +
 +  * [[https://​linuxdata.ru/​questions/​q146.html|Что такое dhparam и как его сгенерировать?​]]
 +
 <​code>​ <​code>​
 # time openssl dhparam -out /​etc/​openvpn/​dh2048.pem 2048 # time openssl dhparam -out /​etc/​openvpn/​dh2048.pem 2048
-real    ​0m24.676s+... 
 +real    ​2m6.588s 
 +...
 </​code>​ </​code>​
  
 ===== Создание самоподписанного сертификата ===== ===== Создание самоподписанного сертификата =====
  
 +  * *.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 94: Line 96:
 State or Province Name (full name) [Some-State]:​Moscow region State or Province Name (full name) [Some-State]:​Moscow region
 Locality Name (eg, city) []:Moscow Locality Name (eg, city) []:Moscow
-Organization Name (eg, company) [Internet Widgits Pty Ltd]:​cko ​      ​+Organization Name (eg, company) [Internet Widgits Pty Ltd]:cko
 Organizational Unit Name (eg, section) []:noc Organizational Unit Name (eg, section) []:noc
 Common Name (eg, YOUR name) []:​server.corpX.un ​      !!!! для некоторых сервисов (ovpn) не должно быть пустым Common Name (eg, YOUR name) []:​server.corpX.un ​      !!!! для некоторых сервисов (ovpn) не должно быть пустым
Line 100: Line 102:
 </​code>​ </​code>​
  
 +ИЛИ
 +
 +<​code>​
 +openssl genrsa -out wild.key 2048
 +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 108: Line 118:
 ... ...
  
 +# openssl crl2pkcs7 -nocrl -certfile wild.bmstu.ru.crt | openssl pkcs7 -print_certs -text -noout
 +</​code><​code>​
 +Certificate:​
 +...
 +Certificate:​
 +...
 +</​code><​code>​
 $ cat ~/​.kube/​config | grep client-certificate-data | cut -f2 -d : | tr -d ' ' | base64 -d | openssl x509 -text -out - $ cat ~/​.kube/​config | grep client-certificate-data | cut -f2 -d : | tr -d ' ' | base64 -d | openssl x509 -text -out -
 +</​code><​code>​
 +...
 +        Issuer: ...
 +...
 +        Subject: ...
 +...
 </​code>​ </​code>​
  
Line 114: Line 137:
  
   * Материалы по Windows [[Материалы по Windows#​Экспорт корневого сертификата]]   * Материалы по Windows [[Материалы по Windows#​Экспорт корневого сертификата]]
 +  * [[Firefox#​Использование системных сертификатов]] в Firefox
 ==== Проверка ==== ==== Проверка ====
 <​code>​ <​code>​
Line 124: Line 148:
 ==== Debian ==== ==== Debian ====
 <​code>​ <​code>​
-server# cp corpX-PDC-CA.crt /​usr/​local/​share/​ca-certificates/​+# wget http://​lan.corpX.un/​ca.crt 
 + 
 +# cp ca.crt /​usr/​local/​share/​ca-certificates/​ 
 +  или 
 +# cp corpX-PDC-CA.crt /​usr/​local/​share/​ca-certificates/​ 
 +  или 
 +# cp wild.crt /​usr/​local/​share/​ca-certificates/​
  
 # update-ca-certificates # update-ca-certificates
Line 131: Line 161:
 ... ...
  
-server# ls /​etc/​ssl/​certs | grep corp+server# ls /​etc/​ssl/​certs | grep "​wild\|corp\|ca.pem"​
 ... ...
  
-server# openssl verify server.crt+# openssl verify server.crt
 server.crt: OK server.crt: OK
  
-# wget -O - https://​www.corpX.un+# curl -v 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 163: Line 208:
  
 ==== Настройка атрибутов базы 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 168: Line 216:
 ... ...
 [ 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 226: Line 279:
 ==== Инициализация списка отозванных сертификатов ==== ==== Инициализация списка отозванных сертификатов ====
 <​code>​ <​code>​
-lan# openssl ca -gencrl -out /​var/​www/​html/​ca.crl+lan# openssl ca -gencrl ​-crldays 365 -out /​var/​www/​html/​ca.crl
 </​code><​code>​ </​code><​code>​
 Enter pass phrase for ./​CA/​ca.key:​Pa$$w0rd Enter pass phrase for ./​CA/​ca.key:​Pa$$w0rd
Line 236: Line 289:
 <​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 248: Line 303:
 Common Name (eg, YOUR name) []:​www.corpX.un Common Name (eg, YOUR name) []:​www.corpX.un
 ... ...
 +</​code>​
 +  или
 +<​code>​
 +gate# openssl req -new -key gate.key -out gate.req -subj '/​C=RU/​ST=Moscow region/​L=Moscow/​O=cko/​OU=noc/​CN=gate.corpX.un'​
 </​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 258: Line 340:
  
 ==== Подпись запроса на сертификат центром сертификации ==== ==== Подпись запроса на сертификат центром сертификации ====
 +
 +=== Добавление расширений при подписи запроса на сертификат ===
 +
 <​code>​ <​code>​
 # cat www.ext # cat www.ext
Line 263: Line 348:
 subjectAltName = @alt_names subjectAltName = @alt_names
 [alt_names] [alt_names]
-DNS.1 = www.corpX.un+DNS.1 = corpX.un 
 +DNS.2 = www.corpX.un 
 +#DNS.1 = *.corpX.un
 </​code><​code>​ </​code><​code>​
 lan# openssl ca -days 365 -in www.req -out www.crt -extfile www.ext lan# openssl ca -days 365 -in www.req -out www.crt -extfile www.ext
Line 271: Line 358:
 lan# ls CA/​newcerts/​ lan# ls CA/​newcerts/​
 </​code>​ </​code>​
 +
 +
  
 ==== Копирование подписанного сертификата на целевой сервер ==== ==== Копирование подписанного сертификата на целевой сервер ====
Line 280: Line 369:
  
 ==== Проверка подписи сертификата ==== ==== Проверка подписи сертификата ====
 +
 +  * [[#​Просмотр содержимого файла сертификата]]
 <​code>​ <​code>​
 www# wget http://​lan.corpX.un/​ca.crt www# wget http://​lan.corpX.un/​ca.crt
Line 287: Line 378:
  
 ==== Проверка соответствия ключа и сертификата ==== ==== Проверка соответствия ключа и сертификата ====
 +
 +  * [[https://​www.ssl.com/​faqs/​how-do-i-confirm-that-a-private-key-matches-a-csr-and-certificate/​|How to Verify an RSA Private Key Matches a CSR and Certificate]]
 +
 <​code>​ <​code>​
-$ openssl x509 -noout -modulus -in www.crt | openssl ​md5+$ openssl x509 -noout -modulus -in www.crt | openssl ​sha256
  
-$ openssl rsa -noout -modulus -in www.key | openssl ​md5+$ openssl rsa -noout -modulus -in www.key | openssl ​sha256
 </​code>​ </​code>​
 ==== Шифрование ключа сервера ==== ==== Шифрование ключа сервера ====
Line 314: Line 408:
 Email Address [noc@corpX.un]:​user1@corpX.un Email Address [noc@corpX.un]:​user1@corpX.un
 ... ...
 +</​code>​
 +ИЛИ
 +<​code>​
 +$ openssl req -new -key user1.key -out user1.req -subj '/​C=RU/​ST=Moscow region/​L=Moscow/​O=cko/​OU=group1/​CN=user1/​emailAddress=user1@corpX.un/'​
 +</​code>​
 +ИЛИ
 +<​code>​
 +freeipaclient$ openssl req -new -key user1.key -out user1.req -subj '/​O=CORPX.UN/​CN=user1/​emailAddress=user1@corpX.un/'​
 </​code>​ </​code>​
  
Line 331: Line 433:
 <​code>​ <​code>​
 $ openssl pkcs12 -export -in user1.crt -inkey user1.key -out user1.p12 -passout pass:​ppassword1 $ openssl pkcs12 -export -in user1.crt -inkey user1.key -out user1.p12 -passout pass:​ppassword1
 +openssl3# openssl pkcs12 -legacy -export -in user1.crt -inkey user1.key -out user1.p12 -passout pass:​ppassword1
  
 $ openssl pkcs12 -info -in user1.p12 $ openssl pkcs12 -info -in user1.p12
Line 343: Line 446:
 lan# less CA/​index.txt lan# less CA/​index.txt
  
-lan# openssl ca -gencrl -out /​var/​www/​html/​ca.crl+lan# openssl ca -gencrl ​-crldays 365 -out /​var/​www/​html/​ca.crl 
 + 
 +lan# openssl crl -text -noout -in /​var/​www/​html/​ca.crl | less 
 +... 
 +    Serial Number: 0M 
 +... 
 +    Serial Number: 0N 
 +... 
 +</​code><​code>​ 
 +lan# scp /​var/​www/​html/​ca.crl gate:/​etc/​ssl/​certs/​
 </​code>​ </​code>​
пакет_openssl.1703491283.txt.gz · Last modified: 2023/12/25 11:01 by val