Содержание
- 1. Введение
- 2. SSL и как это работает
- 3. Частные ключи
- 4. Публичные сертификаты
- 5. Корневые сертификаты
- 6. Центры сертификации
- 7. Цепочка сертификатов
- 8. Keystore с использованием Java keytool
- 9. Команды хранилища ключей
- 10. Настройте SSL, используя Keystores и самоподписанные сертификаты в Apache Tomcat.
1. Введение
Кто из нас не посещал ebay, amazon, чтобы купить что-нибудь, или его личный банковский счет, чтобы проверить это. Считаете ли вы, что эти сайты достаточно безопасны для размещения ваших личных данных, таких как (номер кредитной карты или номер банковского счета и т. Д.)?
Большинство этих сайтов используют протокол Socket Layer (SSL) для защиты своих интернет-приложений. SSL позволяет зашифровывать данные от клиента, такого как веб-браузер, перед передачей, так что кто-то, пытающийся перехватить данные, не сможет их расшифровать.
Многие серверы приложений Java и веб-серверы поддерживают использование хранилищ ключей для конфигурации SSL. Если вы создаете безопасные Java-программы, обучение созданию хранилища ключей является первым шагом.
2. SSL и как это работает
HTTP-соединение на основе HTTP всегда инициируется клиентом с использованием URL-адреса, начинающегося с https: // вместо http: //. В начале сеанса SSL выполняется рукопожатие SSL. Это рукопожатие производит криптографические параметры сеанса. Упрощенный обзор того, как обрабатывается рукопожатие SSL, показан на диаграмме ниже.
Вкратце, как это работает:
- Браузер запрашивает защищенную страницу (обычно https: //).
- Веб-сервер отправляет свой открытый ключ со своим сертификатом.
- Браузер проверяет, что сертификат был выдан доверенной стороной (обычно доверенным корневым центром сертификации), что сертификат все еще действителен и что сертификат связан с сайтом, к которому обращался.
- Затем браузер использует открытый ключ для шифрования случайного симметричного ключа шифрования и отправляет его на сервер с зашифрованным URL-адресом, а также с другими зашифрованными данными http.
- Веб-сервер расшифровывает симметричный ключ шифрования, используя свой закрытый ключ, и использует симметричный ключ для расшифровки данных URL и http.
- Веб-сервер отправляет обратно запрошенный HTML-документ и данные http, зашифрованные с помощью симметричного ключа.
- Браузер расшифровывает данные http и html, используя симметричный ключ, и отображает информацию.
Мир SSL имеет, по сути, три типа сертификатов: закрытые ключи, открытые ключи (также называемые открытыми сертификатами или сертификатами сайта) и корневые сертификаты.
3. Частные ключи
Закрытый ключ содержит идентификационную информацию сервера, а также значение ключа. Он должен хранить этот ключ в безопасности и защищаться паролем, поскольку он используется для согласования хэша во время рукопожатия. Кто-то может использовать его для расшифровки трафика и получения вашей личной информации. Это как оставить ключ от дома в замке.
4. Публичные сертификаты
Публичный сертификат (открытый ключ) — это та часть, которая предоставляется клиенту, ему нравится ваш личный паспорт, когда вы показываете его в аэропорту. Открытый сертификат, тесно связанный с закрытым ключом, создается из закрытого ключа с использованием запроса на подпись сертификата (CSR). После создания личного ключа вы создаете CSR, который отправляется в ваш центр сертификации (CA). CA возвращает подписанный сертификат, который содержит информацию об идентификации сервера и о CA.
5. Корневые сертификаты
Корневой сертификат CA — это сертификат CA, который представляет собой самозаверяющий сертификат. Этот сертификат представляет объект, который выдает сертификат и известен как Центр сертификации или CA, такой как VeriSign, Thawte и т. Д.
6. Центры сертификации
Компании, которые будут подписывать сертификаты для вас, такие как VeriSign, Thawte, Commodo, GetTrust. Кроме того, многие компании и учреждения действуют как свои собственные CA, либо создавая полную реализацию с нуля, либо используя опцию с открытым исходным кодом, такую как OpenSSL.
7. Цепочка сертификатов
Когда сервер и клиент устанавливают соединение SSL, клиенту предоставляется сертификат; клиент должен определить, доверять ли этому сертификату, этот процесс называется цепочкой сертификатов. Клиент проверяет эмитента сертификата, просматривает его список доверенных корневых сертификатов и сравнивает эмитента в представленном сертификате с субъектами доверенных сертификатов.
Если совпадение найдено, соединение продолжается. Если нет, веб-браузеры могут открыть диалоговое окно, предупреждая вас о том, что он не может доверять сертификату, и предлагая возможность доверять сертификату.
8. Keystore с использованием Java keytool
Java Keytool — это утилита управления ключами и сертификатами. Это позволяет пользователям управлять своими собственными парами открытого и закрытого ключей и сертификатами. Java Keytool хранит ключи и сертификаты в так называемом хранилище ключей . Защищает приватные ключи паролем.
Каждый сертификат в хранилище ключей Java связан с уникальным псевдонимом. При создании хранилища ключей Java вы сначала создадите файл .jks, который первоначально будет содержать только закрытый ключ, а затем создадите CSR. Затем вы импортируете сертификат в хранилище ключей, включая любые корневые сертификаты.
9. Команды хранилища ключей
Создание хранилища ключей, ключей и запросов сертификатов
- Создать хранилище ключей Java и пару ключей
1
keytool -genkey -
alias
mydomain -keyalg RSA -keystore keystore.jks -storepass password
- Создайте запрос на подпись сертификата (CSR) для существующего хранилища ключей Java
1
keytool -certreq -
alias
mydomain -keystore keystore.jks -storepass password -
file
mydomain.csr
- Создать хранилище ключей и самозаверяющий сертификат
1
keytool -genkey -keyalg RSA -
alias
selfsigned -keystore keystore.jks -storepass password -validity 360
Импортные сертификаты
- Импортируйте корневой или промежуточный сертификат CA в существующее хранилище ключей Java
- Импортируйте подписанный первичный сертификат в существующее хранилище ключей Java
1
keytool -
import
-trustcacerts -
alias
mydomain -
file
mydomain.crt -keystore keystore.jks -storepass password
1
|
keytool - import -trustcacerts - alias root - file Thawte.crt -keystore keystore.jks -storepass password |
Экспортные сертификаты
- Экспорт сертификата из хранилища ключей
1
keytool -
export
-
alias
mydomain -
file
mydomain.crt -keystore keystore.jks -storepass password
Проверить / Список / Просмотр сертификатов
- Проверьте автономный сертификат
1
keytool -printcert -
v
-
file
mydomain.crt
- Проверьте, какие сертификаты находятся в хранилище ключей Java
1
keytool -list -
v
-keystore keystore.jks -storepass password
- Проверьте определенную запись хранилища ключей, используя псевдоним
1
keytool -list -
v
-keystore keystore.jks -storepass password -
alias
mydomain
Удалить сертификаты
- Удалить сертификат из хранилища ключей Java Keytool
1
keytool -delete -
alias
mydomain -keystore keystore.jks -storepass password
Изменить пароли
- Изменить пароль хранилища ключей Java
1
keytool -storepasswd -new new_storepass -keystore keystore.jks -storepass password
- Изменить пароль закрытого ключа
1
keytool -keypasswd -
alias
client -keypass old_password -new new_password -keystore client.jks -storepass password
10. Настройте SSL, используя Keystores и самоподписанные сертификаты в Apache Tomcat.
- С помощью этой команды создайте новое хранилище ключей и самозаверяющий сертификат, вам будет предложено ввести определенную информацию, такую как имя пользователя, подразделение, компания и местоположение.
1
keytool -genkey -
alias
tomcat -keyalg RSA -keystore
/home/ashraf/Desktop/JavaCodeGeek/keystore
.jks -validity 360
- Вы можете перечислить детали сертификата, которые вы только что создали с помощью этой команды
1
keytool -list -keystore
/home/ashraf/Desktop/JavaCodeGeek/keystore
.jks
- Загрузить Tomcat 7
- Настройте сервер Tomcat для поддержки соединения SSL или https. Добавление элемента соединителя в Tomcat \ conf \ server.xml
12
<Connector port=
"8443"
maxThreads=
"150"
scheme=
"https"
secure=
"true"
SSLEnabled=
"true"
keystoreFile=
"/home/ashraf/Desktop/JavaCodeGeek/.keystore"
keystorePass=
"password"
clientAuth=
"false"
keyAlias=
"tomcat"
sslProtocol=
"TLS"
/>
- Запустите Tomcat и перейдите по адресу https: // localhost: 8443 / , вы найдете следующую проблему безопасности, когда браузер будет отображать ненадежные сообщения об ошибках. В случае электронной коммерции такие сообщения об ошибках приводят к немедленному недоверию к веб-сайту, и организации рискуют потерять доверие и бизнес со стороны большинства потребителей, это нормально, поскольку ваш сертификат еще не подписан такими центрами сертификации, как Thawte или Verisign. который проверит личность заявителя и выдаст подписанный сертификат.
- Вы можете в любом случае нажать «Продолжить», пока не получите подписанный сертификат.