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
Next revision Both sides next revision
пакет_openssl [2020/06/25 14:43]
val [Создание запроса на сертификат]
пакет_openssl [2024/05/20 14:15]
val [Интерактивное подключение по ssl]
Line 15: Line 15:
 ===== Интерактивное подключение по ssl ===== ===== Интерактивное подключение по ssl =====
 <​code>​ <​code>​
-$ openssl s_client ​-CApath /​etc/​ssl/​certs/ ​-connect ​student.bmstu.ru: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 ​-CApath ​/etc/ssl/certs-starttls smtp -crlf -connect mailhub.bmstu.ru:25+faketime ​-f "​+500d"​ wget -q -O /dev/null https://webinar7.bmstu.ru ​&& echo Ok || echo Err
  
-$ openssl s_client -cert user1.crt -key user1.key -connect www.corpX.un:​443+openssl s_client -starttls smtp -crlf -connect mailhub.bmstu.ru:​25 
 +$ openssl s_client -connect server.corp13.un:​993 -crlf 
 + 
 +lan# 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 42: Line 45:
 ==== Создание пары приватный/​публичный ключ ==== ==== Создание пары приватный/​публичный ключ ====
 <​code>​ <​code>​
 +student@lan:​~$
 user1@server:​~$ openssl genrsa 2048 > key.private user1@server:​~$ openssl genrsa 2048 > key.private
  
 +student@lan:​~$
 user1@server:​~$ openssl rsa -pubout < key.private > key.public user1@server:​~$ openssl rsa -pubout < key.private > key.public
  
 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 60: Line 70:
 ==== Цифровая подпись ==== ==== Цифровая подпись ====
 <​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 xxxxxxxx -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 69: Line 82:
 ===== Создание параметра DH ===== ===== Создание параметра DH =====
 <​code>​ <​code>​
-# openssl dhparam -out /​etc/​openvpn/​dh2048.pem 2048+time openssl dhparam -out /​etc/​openvpn/​dh2048.pem 2048 
 +... 
 +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+server# openssl req -new -x509 -days 3650 -key server.key -out server.crt ​-addext '​subjectAltName=DNS:​server.corpX.un'​
 </​code><​code>​ </​code><​code>​
 ... ...
Line 89: Line 106:
 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+Common Name (eg, YOUR name) []:​server.corpX.un ​      !!!! для некоторых сервисов (ovpn) не должно быть пустым
 Email Address []:​noc@corpX.un Email Address []:​noc@corpX.un
 </​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>​
 server# openssl x509 -text -noout -in server.crt server# openssl x509 -text -noout -in server.crt
 +
 +server# openssl x509 -text -noout
 +-----BEGIN CERTIFICATE-----
 +...
 +
 +$ cat ~/​.kube/​config | grep client-certificate-data | cut -f2 -d : | tr -d ' ' | base64 -d | openssl x509 -text -out -
 </​code>​ </​code>​
  
 ===== Импорт сертификата центра сертификации ===== ===== Импорт сертификата центра сертификации =====
  
 +  * Материалы по Windows [[Материалы по Windows#​Экспорт корневого сертификата]]
 ==== Проверка ==== ==== Проверка ====
 <​code>​ <​code>​
Line 112: Line 141:
 ==== Debian ==== ==== Debian ====
 <​code>​ <​code>​
 +# wget http://​lan.corpX.un/​ca.crt
 +
 +# cp ca.crt /​usr/​local/​share/​ca-certificates/​
 +  или
 server# cp corpX-PDC-CA.crt /​usr/​local/​share/​ca-certificates/​ server# cp corpX-PDC-CA.crt /​usr/​local/​share/​ca-certificates/​
  
Line 120: Line 153:
  
 server# ls /​etc/​ssl/​certs | grep corp server# ls /​etc/​ssl/​certs | grep corp
 +  или
 +server# ls /​etc/​ssl/​certs | grep ca.pem
 ... ...
  
Line 125: Line 160:
 server.crt: OK server.crt: OK
  
-# wget -O - https://​www.corp55.un+# wget -O - https://​www.corpX.un 
 +  или 
 +# curl 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 140: Line 192:
   * [[http://​gagravarr.org/​writing/​openssl-certs/​ca.shtml|Certificate Management and Generation with OpenSSL]]   * [[http://​gagravarr.org/​writing/​openssl-certs/​ca.shtml|Certificate Management and Generation with OpenSSL]]
   * [[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://​www.golinuxcloud.com/​openssl-ca-vs-openssl-x509-comparison/​|openssl ca vs openssl x509 comparison]]
  
 ==== Зачем может понадобиться свой УЦ? ==== ==== Зачем может понадобиться свой УЦ? ====
Line 149: Line 203:
  
 ==== Настройка атрибутов базы 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 154: Line 211:
 ... ...
 [ 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 222: Line 284:
 <​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/​
  
-www# openssl req -new -key www.key -out www.req+www# openssl req -new -key www.key -out www.req ​  #-sha256
 </​code><​code>​ </​code><​code>​
 ... ...
Line 236: Line 300:
 </​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 245: Line 330:
 ==== Подпись запроса на сертификат центром сертификации ==== ==== Подпись запроса на сертификат центром сертификации ====
 <​code>​ <​code>​
-lan# openssl ca -days 365 -in www.req -out www.crt+lan# openssl ca -days 365 -in www.req -out www.crt ​ # -extfile www.ext
  
 lan# cat CA/​index.txt lan# cat CA/​index.txt
  
 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>​
  
Line 260: Line 357:
  
 ==== Проверка подписи сертификата ==== ==== Проверка подписи сертификата ====
 +
 +  * [[#​Просмотр содержимого файла сертификата]]
 <​code>​ <​code>​
 www# wget http://​lan.corpX.un/​ca.crt www# wget http://​lan.corpX.un/​ca.crt
Line 277: Line 376:
 </​code>​ </​code>​
  
-==== Добавление атрибутов в сертификат ==== 
  
-  * На примере subjectAltName. Оказался,​ нужным для Spark клиента 
-  * [[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 =====
Line 319: Line 393:
 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>​
  
Line 336: Line 414:
 <​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 349: Line 428:
  
 lan# openssl ca -gencrl -out /​var/​www/​html/​ca.crl lan# openssl ca -gencrl -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>​
пакет_openssl.txt · Last modified: 2024/05/25 10:13 by val