Сертификат, ключ, шифрование, что такое rsa?
Сертификат, ключ, шифрование, что такое rsa?

Простой ответ:

Сертификат также называется CA (Certification Authority)Сертификат;ключ Просто за добавление Расшифроватьиспользуемый файл или строка;rsaАлгоритм асимметричного шифрования。

ключ

ключ В области асимметричного шифрования,Относится к закрытому ключу и открытому ключу.,они всегда появляются парами,Его основная функция – шифрование.и Расшифровать,Конкретные принципы см.Алгоритм шифрования RSA

Следует отметить, что,WIKIупомянуто вВ 1999 году RSA-155 (512 бит) был успешно разложен.,12 декабря 2009 года также было успешно разложено число RSA-768 (768 бит, 232 цифры).,В настоящее время Лао Гао рекомендует напрямую использовать 2048-битное или 4086-битное шифрование.

openssl

Прежде чем говорить о закрытом ключе и открытом ключе,Возможно, вам придется сначала ознакомиться с инструментом командной строки openssl.,opensslэто сильное шифрование、Расшифроватьинструмент,Поддерживается организациями с открытым исходным кодом. Использование инструментов openssl,Мы можем реализовать некоторые общие алгоритмы суммирования.,нравитьсяПростой расчет md5, base64, sha1, sha2 под Linux

Язык кода:javascript
копировать
# Справочная информация

Стандартный commands
asn1parse      ca             ciphers        crl            crl2pkcs7
dgst           dh             dhparam        dsa            dsaparam
ec             ecparam        enc            engine         errstr
gendh          gendsa         genrsa         nseq           ocsp
passwd         pkcs12         pkcs7          pkcs8          prime
rand           req            rsa            rsautl         s_client
s_server       s_time         sess_id        smime          speed
spkac          verify         version        x509

Message Digest(сводная информация) commands (see the `dgst' command for more details)
md2            md4            md5            mdc2           rmd160
sha            sha1

Шифр (шифрование) commands (see the `enc' command for more details)
aes-128-cbc    aes-128-ecb    aes-192-cbc    aes-192-ecb    aes-256-cbc
aes-256-ecb    base64         bf             bf-cbc         bf-cfb
bf-ecb         bf-ofb         cast           cast-cbc       cast5-cbc
cast5-cfb      cast5-ecb      cast5-ofb      des            des-cbc
des-cfb        des-ecb        des-ede        des-ede-cbc    des-ede-cfb
des-ede-ofb    des-ede3       des-ede3-cbc   des-ede3-cfb   des-ede3-ofb
des-ofb        des3           desx           rc2            rc2-40-cbc
rc2-64-cbc     rc2-cbc        rc2-cfb        rc2-ecb        rc2-ofb
rc4            rc4-40         seed           seed-cbc       seed-cfb
seed-ecb       seed-ofb

# Команды, связанные с шифрованием
options are
-in <file>     input file
-out <file>    output file
-pass <arg>    pass phrase source
-e             encrypt
-d             decrypt
-a/-base64     base64 encode/decode, depending on encryption flag
-k             passphrase is the next argument
-kfile         passphrase is the first line of the file argument
-md            the next argument is the md to use to create a key
                 from a passphrase.  One of md2, md5, sha or sha1
-K/-iv         key/iv in hex is the next argument
-[pP]          print the iv/key (then exit if -P)
-bufsize <n>   buffer size
-engine e      use engine e, possibly a hardware device.

Данные процесса

сводная информация
Язык кода:javascript
копировать
# base64
echo -n "phpgao" | openssl base64
# Расшифровать -d == decrypt
echo "cGhwZ2Fv" | openssl base64 -d
# Рассчитайте сводку файла, то же самое ниже
openssl base64 -in nginx.conf
# md5
echo -n "phpgao" | openssl md5
# sha128
echo -n "phpgao" | openssl sha1
Шифрование и дешифрование
Язык кода:javascript
копировать
# Используйте алгоритм rc4 для шифрования строки php, используйте ключphpgao и выводите ее с использованием кодировки base64.
echo -n "php" | openssl rc4 -k phpgao -base64

# использоватьrc4алгоритм Расшифроватьнить,Используйте ключphpgao,Ввод кодируется с использованием base64.
echo U2FsdGVkX18f3qEoEhVf+hsNOg== | openssl rc4 -d -k phpgao -base64
ключевые операции, связанные с
Язык кода:javascript
копировать
# Сгенерировать закрытый ключ
# genrsa Относится к использованию алгоритма rsa для создания файлов ключей.
# -des3 Относится к алгоритму, используемому для шифрования закрытого ключа (необязательно).
openssl genrsa -des3 -out key_rsa 4096
openssl genrsa -out key_rsa 4096
# Удалите существующие пароли (сначала сделайте резервную копию)
cp key_rsa old.key
openssl rsa -in old.key -out key_rsa

# Создайте открытый ключ на основе только что созданного закрытого ключа.
openssl rsa -in key_rsa -pubout -out key_rsa.pub

# Шифрование данных с использованием открытого ключа
# -in входной файл
echo -n "phpgao" | openssl rsautl -encrypt -pubin -inkey key_rsa.pub -out a.txt

# использовать私钥Расшифроватьданные
openssl rsautl -decrypt -inkey key_rsa -in a.txt

# Просмотр ключевой информации
openssl rsa -in key_rsa -text -noout
openssl rsa -pubin -in key_rsa.pub -text -noout

# Проверить закрытый ключ
openssl rsa -check -in key_rsa
# Проверьте файл CSR (подробнее об этом позже)
openssl req -text -noout -verify -in domain.csr
# Проверьте информацию о сертификате
openssl x509 -text -noout -in domain.crt
некоторые дополнения
О формате ключа

Существует множество форматов ключа.,Нам нужно обратить внимание при его использовании. Формат ключа, который мы только что использовали для генерации openssl, называется PKCS#1.,Разные программы могут требовать разные форматы ключа.,ключ в разные форматы можно конвертировать.

RSA Private Key (PKCS#1):

Язык кода:javascript
копировать
-----BEGIN RSA PRIVATE KEY-----
BASE64 ENCODED DATA
-----END RSA PRIVATE KEY-----

PKCS#1 RSA Public Key:

Язык кода:javascript
копировать
-----BEGIN RSA PUBLIC KEY-----
BASE64 ENCODED DATA
-----END RSA PUBLIC KEY-----

X.509 Public Key:

Язык кода:javascript
копировать
-----BEGIN PUBLIC KEY-----
BASE64 ENCODED DATA
-----END PUBLIC KEY-----

PKCS#8 Private Key:

Язык кода:javascript
копировать
-----BEGIN PRIVATE KEY-----
BASE64 ENCODED DATA
-----END PRIVATE KEY-----

PKCS#8 Encrypted Private Key:

Язык кода:javascript
копировать
-----BEGIN ENCRYPTED PRIVATE KEY-----
BASE64 ENCODED DATA
-----END ENCRYPTED PRIVATE KEY-----

SSH public key:

Язык кода:javascript
копировать
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6Fo/HHPELU4TLdQwZtidB4hph8xTQberQ8467l2wkXFKV1dlBncCLUA6SUD9JypHIb3I6VNv3rnoEWtRsQYFX5TwGqnxxxH7ZjMt2O1NE9OTEf7H50QmkhHBEKruuEt+OrRXSL6gwHwuAYvGl2nWyKhdaKPg2AMHV6NV3hKEiyEhCe9XCg72KTdHTOVpDS2RjnsU4spyioi9OVj5Eu3vjBeQUifULJzbgMqB0kYS+mJSiol+ZK2YOp1HdiR7vxqfi7r+d8LDhGox8mO00nlYc4h7LBOe75G5KktSbTt5Pyiim+DF6efvmtj2zJ/nN3H2ZHG1dLVQl82QJ8Kz3Rosh laogao@local

ссылкаConverting OpenSSH public keys,我们可以использовать命令 ssh-keygen -f id_rsa.pub -e -m pem Преобразование формата ssh-rsa в PKCS#1 Формат ПЕМ.

Дополнительные форматы (некоторые из которых мы часто используем):

Язык кода:javascript
копировать
#define PEM_STRING_X509_OLD "X509 CERTIFICATE"
#define PEM_STRING_X509     "CERTIFICATE"
#define PEM_STRING_X509_PAIR    "CERTIFICATE PAIR"
#define PEM_STRING_X509_TRUSTED "TRUSTED CERTIFICATE"
#define PEM_STRING_X509_REQ_OLD "NEW CERTIFICATE REQUEST"
#define PEM_STRING_X509_REQ "CERTIFICATE REQUEST"
#define PEM_STRING_X509_CRL "X509 CRL"
#define PEM_STRING_EVP_PKEY "ANY PRIVATE KEY"
#define PEM_STRING_PUBLIC   "PUBLIC KEY"
#define PEM_STRING_RSA      "RSA PRIVATE KEY"
#define PEM_STRING_RSA_PUBLIC   "RSA PUBLIC KEY"
#define PEM_STRING_DSA      "DSA PRIVATE KEY"
#define PEM_STRING_DSA_PUBLIC   "DSA PUBLIC KEY"
#define PEM_STRING_PKCS7    "PKCS7"
#define PEM_STRING_PKCS7_SIGNED "PKCS #7 SIGNED DATA"
#define PEM_STRING_PKCS8    "ENCRYPTED PRIVATE KEY"
#define PEM_STRING_PKCS8INF "PRIVATE KEY"
#define PEM_STRING_DHPARAMS "DH PARAMETERS"
#define PEM_STRING_DHXPARAMS    "X9.42 DH PARAMETERS"
#define PEM_STRING_SSL_SESSION  "SSL SESSION PARAMETERS"
#define PEM_STRING_DSAPARAMS    "DSA PARAMETERS"
#define PEM_STRING_ECDSA_PUBLIC "ECDSA PUBLIC KEY"
#define PEM_STRING_ECPARAMETERS "EC PARAMETERS"
#define PEM_STRING_ECPRIVATEKEY "EC PRIVATE KEY"
#define PEM_STRING_PARAMETERS   "PARAMETERS"
#define PEM_STRING_CMS      "CMS"

Список изwhat is the differences between “BEGIN RSA PRIVATE KEY” and “BEGIN PRIVATE KEY”

Сертификат ЦС

Сертификатиключдругой,Сертификат ЦС означает Сертификат, выданный нам авторитетной организацией.,Наши компьютеры или электронные устройства имеют встроенный корневой сертификат.,Наш компьютерный корень доверия Сертификат.

Язык кода:javascript
копировать
   +-----------------+                    +--------------------+
   |                 |                    |                    |
   |                 |                    |                    |
   |                 |                    |                    |
   |   browser/PC    |  ① GET / HTTP/1.0 |                    |
   |                 |-------------------->  sites over https  |
   |                 ① WAIT! Where is CA ?|                   |
   |                 +-------------------->                    |
   |                 |  ④ Anyway,give me |                    |
   +-----+----^------+   the code!        +--------------------+
         |    |
         |    |
         |    |③ He is good!
② Is's it|    |
a bad site?   |
         |    |    +----------------------+
         |    |    |                      |
         |    +----+                      |
         |         |                      |
         |         |         CA           |
         +--------->                      |
                   |                      |
                   |                      |
                   +----------------------+

Принцип сертификата

Сертификат ЦС позволяет нам определить легитимность сайта,Кратко изложим принцип:

  1. Сгенерировать мой открытый ключ
  2. Организация CA шифрует мой открытый ключ и связанную с ним информацию своим собственным закрытым ключом.
  3. Клиенты доверяют CA,и иметь открытый ключ ЦС,客户就可以использовать公钥Расшифроватьзашифрованный Сертификат,и получил свой открытый ключ от Сертификата
  4. нравиться果能用CAоткрытый ключ Расшифровать出данные,Это означает, что мой Сертификат сертифицирован CA.,Клиенты могут посещать с уверенностью,Если система обнаружит, что Сертификат выдан не авторитетной организацией ЦС,предупредит пользователя
  5. Клиент использует мой открытый ключ для расшифровки данных, а затем происходит обмен информацией.

Есть несколько вещей, на которые следует обратить внимание:

  • Сертификат имеет срок действия.
  • Сопутствующая информация в Сертификате,Необходимо включить цепочку доверия, которая меняет Сертификат в корневой Сертификат.,Как показано ниже,bing.comиз Сертификатсередина,Вы можете следовать подсказкам,Найдите корневой центр сертификации,Итак, после создания собственного Сертификата,Эту цепочку доверия необходимо добавить, чтобы система правильно идентифицировала конечный корневой центр сертификации, связанный с Сертификатом.

информация о сертификате Bing

Информация о сертификате blog.phpgao.com

Формат сертификата

SSL использует стандарт сертификата X.509 и существует два формата кодирования.

Формат кодировки сертификата

PEM (Privacy Enhanced Mail), обычно используемый в центрах сертификации (центрах сертификации, CA), имеет расширения .pem, .crt, .cer и .key. Содержимое представляет собой файл ASCII в кодировке Base64 с тегами заголовка и хвоста, похожими на «----- BEGIN CERTIFICATE-----» и «----- END CERTIFICATE-----». Сертификаты аутентификации сервера, промежуточные сертификаты аутентификации и закрытые ключи могут храниться в формате PEM (сертификат аутентификации фактически является открытым ключом). Подобные серверы, такие как Apache и nginx, используют сертификаты формата PEM.

DER (Distinguished Encoding Rules), который отличается от PEM тем, что использует двоичный код вместо ASCII в кодировке Base64. Расширение — .der, но в качестве расширения также часто используется .cer. Все типы сертификатов аутентификации и закрытых ключей могут храниться в формате DER. Java представляет собой типичную платформу использования.

Преобразование кодировки сертификата
Язык кода:javascript
копировать
# PEM в DER
openssl x509 -in cert.crt -outform der -out cert.der

# DER в PEM
openssl x509 -in cert.crt -inform der -outform pem -out cert.pem

CSR

In public key infrastructure (PKI) systems, a certificate signing request (also CSR or certification request) is a message sent from an applicant to a certificate authority in order to apply for a digital identity certificate. The most common format for CSRs is the PKCS #10 specification and another is the Signed Public Key and Challenge Spkac format generated by some Web browsers. - Wiki of Certificate signing request

CSR(Certificate Signing Request), который представляет собой файл запроса, используемый при подаче заявки на сертификат цифровой идентификации от агентства CA. Его наиболее распространенный формат — PKCS. #10。Перед созданием файла запроса,Нам нужно подготовить пару симметричных ключей. Храните информацию о закрытом ключе самостоятельно,Запрос будет сопровождаться информацией об открытом ключе и стране.,Город,доменное имя,Электронная почта и другая информация,Информация о подписи также будет прикреплена к CSR. Когда мы подготовим файл CSR, мы сможем отправить его в агентство CA.,Ждем, пока они подпишут за нас,После подписания мы получим crt-файл.,Прямо сейчас Сертификат。

Язык кода:javascript
копировать
# помощь
openssl req -h
# Создайте файл запроса CSR и закрытый ключ.
openssl req -nodes -days 365 -newkey rsa:2048 -keyout key_rsa -out domain.csr
# Создайте файл запроса CSR на основе существующего закрытого ключа.
openssl req -new -days 365 -key key_rsa -out domain.csr

# Информацию можно написать напрямую
openssl req -new -days 3650 -key key_rsa -out domain.csr -subj \
"/C=CN/ST=Shanghai/L=Shanghai/O=Qihoo 360/OU=IT Dept/CN=blog.phpgao.com/emailAddress=admin@phpgao.com"

# Проверьте информацию о файле CSR
openssl req -text -noout -verify -in domain.csr

CRT

Фактически, нам в конечном итоге понадобится файл закрытого ключа и файл сертификата. На этом этапе мы получим файл CRT.

самоподписавшийся

После того, как мы сгенерируем файл CSR, мы можем начать подписывать. Да, подпишите сами!

Язык кода:javascript
копировать
openssl ca -h
# Сначала создайте корневой сертификат CA.
openssl req -x509 -nodes -days 36500 -newkey rsa:2048 -keyout key_ca_rsa -out ca.crt
# Подпишитесь, используя закрытый ключ ЦС.
openssl ca -policy policy_anything -days 365 -cert ca.crt -keyfile key_rsa -in domain.csr -out domain.crt

# Ошибка может возникнуть из-за отсутствия некоторых необходимых файлов.
mkdir -p demoCA/newCerts
touch demoCA/index.txt 
echo -n "01" > demoCA/serial
Создать сертификат напрямую

Конечно, мы также можем создавать файлы CRT напрямую.

Язык кода:javascript
копировать
# Создать закрытый ключ сертификата
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout key_rsa -out key.crt
# Создать сертификат из существующего закрытого ключа
openssl req -x509 -new -days 365 -key domain.key -out domain.crt


# Проверьте информацию о сертификате
openssl x509 -text -noout -in domain.crt

Дополнительная информация

Информация, необходимая CSR

Язык кода:javascript
копировать
CN = Country Name (2 letter code)
ST = State or Province Name (full name)
L  = Locality Name (eg, city)
O  = Organization Name (eg, company)
OU = Organizational Unit Name
CN = Common Name (eg, your name or your server's hostname)

# пример

Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Shanghai
Locality Name (eg, city) []:Shanghai
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Qihoo 360
Organizational Unit Name (eg, section) []:IT Dept
Common Name (e.g. server FQDN or YOUR name) []:blog.phpgao.com
Email Address []:admin@phpgao.com

# Мы можем использовать следующие параметры напрямую, когда нам нужно ввести вышеуказанную информацию, поэтому нам не нужно вводить их один за другим.
-subj \
"/C=CN/ST=Shanghai/L=Shanghai/O=Qihoo 360/OU=IT Dept/CN=blog.phpgao.com/emailAddress=admin@phpgao.com"

Diffie-Hellman

Конечная цель алгоритма шифрования Диффи-Хеллмана — завершить взаимодействие симметричных секретных ключей между взаимодействующими сторонами, но он уникален тем, что не приведет к утечке секретного ключа даже в небезопасной среде (кто-то подслушивает). , и время генерации будет относительно долгим, пожалуйста, подождите.

Язык кода:javascript
копировать
openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Как использовать:

Язык кода:javascript
копировать
ssl_dhparam /etc/ssl/certs/dhparam.pem;

Конфигурация nginx для SSL

Язык кода:javascript
копировать
# from https://cipherli.st/
# and https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;

ssl_dhparam /etc/ssl/certs/dhparam.pem;

Онлайн-инструменты SSL

Онлайн-инструменты для сертификатов SSLОнлайн-инструменты SSL

Reference:

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода