Простой ответ:
Сертификат также называется CA (Certification Authority)Сертификат;ключ Просто за добавление Расшифроватьиспользуемый файл или строка;rsaАлгоритм асимметричного шифрования。
ключ В области асимметричного шифрования,Относится к закрытому ключу и открытому ключу.,они всегда появляются парами,Его основная функция – шифрование.и Расшифровать,Конкретные принципы см.Алгоритм шифрования RSA。
Следует отметить, что,WIKIупомянуто вВ 1999 году RSA-155 (512 бит) был успешно разложен.,12 декабря 2009 года также было успешно разложено число RSA-768 (768 бит, 232 цифры).,В настоящее время Лао Гао рекомендует напрямую использовать 2048-битное или 4086-битное шифрование.
Прежде чем говорить о закрытом ключе и открытом ключе,Возможно, вам придется сначала ознакомиться с инструментом командной строки openssl.,opensslэто сильное шифрование、Расшифроватьинструмент,Поддерживается организациями с открытым исходным кодом. Использование инструментов openssl,Мы можем реализовать некоторые общие алгоритмы суммирования.,нравитьсяПростой расчет md5, base64, sha1, sha2 под Linux
# Справочная информация
Стандартный 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.
# 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
# Используйте алгоритм rc4 для шифрования строки php, используйте ключphpgao и выводите ее с использованием кодировки base64.
echo -n "php" | openssl rc4 -k phpgao -base64
# использоватьrc4алгоритм Расшифроватьнить,Используйте ключphpgao,Ввод кодируется с использованием base64.
echo U2FsdGVkX18f3qEoEhVf+hsNOg== | openssl rc4 -d -k phpgao -base64
# Сгенерировать закрытый ключ
# 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):
-----BEGIN RSA PRIVATE KEY-----
BASE64 ENCODED DATA
-----END RSA PRIVATE KEY-----
PKCS#1 RSA Public Key:
-----BEGIN RSA PUBLIC KEY-----
BASE64 ENCODED DATA
-----END RSA PUBLIC KEY-----
X.509 Public Key:
-----BEGIN PUBLIC KEY-----
BASE64 ENCODED DATA
-----END PUBLIC KEY-----
PKCS#8 Private Key:
-----BEGIN PRIVATE KEY-----
BASE64 ENCODED DATA
-----END PRIVATE KEY-----
PKCS#8 Encrypted Private Key:
-----BEGIN ENCRYPTED PRIVATE KEY-----
BASE64 ENCODED DATA
-----END ENCRYPTED PRIVATE KEY-----
SSH public key:
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 Формат ПЕМ.
Дополнительные форматы (некоторые из которых мы часто используем):
#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”
Сертификатиключдругой,Сертификат ЦС означает Сертификат, выданный нам авторитетной организацией.,Наши компьютеры или электронные устройства имеют встроенный корневой сертификат.,Наш компьютерный корень доверия Сертификат.
+-----------------+ +--------------------+
| | | |
| | | |
| | | |
| 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 |
+---------> |
| |
| |
+----------------------+
Сертификат ЦС позволяет нам определить легитимность сайта,Кратко изложим принцип:
Есть несколько вещей, на которые следует обратить внимание:
↑ информация о сертификате 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 представляет собой типичную платформу использования.
# 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
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-файл.,Прямо сейчас Сертификат。
# помощь
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.
После того, как мы сгенерируем файл CSR, мы можем начать подписывать. Да, подпишите сами!
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 напрямую.
# Создать закрытый ключ сертификата
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
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"
Конечная цель алгоритма шифрования Диффи-Хеллмана — завершить взаимодействие симметричных секретных ключей между взаимодействующими сторонами, но он уникален тем, что не приведет к утечке секретного ключа даже в небезопасной среде (кто-то подслушивает). , и время генерации будет относительно долгим, пожалуйста, подождите.
openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Как использовать:
ssl_dhparam /etc/ssl/certs/dhparam.pem;
# 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
Reference: