Очистка CA ключей и подписанных сертификатов
Для создания CA сертификата последовательно введите: cn sh sh liuzy CA CA, затем нажмите Enter чтобы пропустить остальные запросы;
Для создания запроса сертификата Nginx последовательно введите: cn sh sh liuzy nginx nginx, затем нажмите Enter чтобы пропустить остальные запросы;
Для подписи сертификата Nginx введите y два раза и нажмите Enter для подтверждения;
Для создания запроса сертификата клиента последовательно введите: cn sh sh liuzy client client, затем нажмите Enter чтобы пропустить остальные запросы;
Для подписи сертификата клиента введите y два раза и нажмите Enter для подтверждения
Откройте браузер и введите IP хоста, чтобы получить доступ к главной странице Nginx
Установлены NodeJS, генератор проекта и запущено приложение в фоновом режиме
# Создайте новый проект Node.js test
express test -e
# Перейдите в директорию проекта
cd test
# Установите зависимости проекта
npm install
# Измените файл index.js, чтобы при обращении к / был возвращён JSON
vim routes/index.js
# Удалите или закомментируйте res.render('index', { title: 'Express' });
# Замените его следующим кодом
res.send({ name: "liuzy", QQ: "416657468" });
cd ~
forever start -o test.log test/bin/www
# Проверьте, работает ли проект, используя порт по умолчанию Yö
lsof -i :3000
# Настройте Nginx под root
cd ~
tail -f test.log
Откройте браузер и перейдите по адресу http://IP_вашего_хоста:3000
Вы должны увидеть ответ сервера в виде JSON со следующими данными:
{"name": "liuzy", "QQ": "416657468"}
- Редактирование `/etc/nginx/nginx.conf`, добавление конфигурации в конце секции `http`
server { listen 80; server_name liuzy.com www.liuzy.com; location / { rewrite (.*) https://www.liuzy.com/$1 permanent; } } server { listen 443 ssl; server_name liuzy.com www.liuzy.com; ssl_certificate /etc/pki/CA/myssl/nginx.crt; ssl_certificate_key /etc/pki/CA/myssl/nginx.pem; # Настройки двусторонней аутентификации, сейчас закомментированы #ssl_client_certificate /etc/pki/CA/cacert.pem; #ssl_verify_client on; location / { proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://127.0.0.1:3000;
client_max_body_size 20m;
}
```
- Проверьте правильность конфигурации, если всё верно, будет выведено `successful`
```bash
nginx -t
```
- Примените конфигурацию, успешное завершение операции не возвращает никакой информации
```bash
nginx -s reload
```
## Изменение host
- Измените файл `hosts` локальной системы Windows
```text
(Если ваша система Windows 8 или Windows 10, сначала скопируйте файл `hosts` на рабочий стол или в другое место, а затем переместите его обратно после изменения)
Откройте папку `C:\Windows\System32\drivers\etc`
Редактируйте `hosts`, добавив следующие строки: (перед адресом указана IP вашего виртуального сервера)
192.168.31.186 liuzy.com
192.168.31.186 www.liuzy.com
```
- Проверка изменений
```text
Откройте командную строку `cmd`, введите `ping liuzy.com`, проверьте, чтобы запрос был направлен на IP вашего виртуального сервера
```
## Доступ к проекту
- Теперь используйте браузер для доступа к `http://liuzy.com` или `http://www.liuzy.com`com`, запрос будет перенаправлен DNS-сервером к вашему виртуальному серверу
- На виртуальном сервере Nginx перенаправляет запрос на `https://www.liuzy.com`
- Затем запрос передается на порт OnClickListener{3000} виртуального сервера, где NodeJS проект test отвечает JSON-строкой
- Таким образом односторонняя аутентификация выполнена, двустороннюю аутентификацию можно продолжить
## Двухсторонняя аутентификация
- Включите двухстороннюю аутентификацию
```text
Подключитесь как root, откройте `/etc/nginx/nginx.conf`
Удалите комментарии для двухсторонней аутентификации:
ssl_client_certificate /etc/pki/CA/cacert.pem;
ssl_verify_client on;
Примените конфигурацию, используя:
nginx -s reload
```
- При попытке доступа через браузер вы получите сообщение:
```text
No required SSL certificate was sent
```
- Используйте программу для отправки сертификата на сервер
```text
Скачайте клиентский сертификат, созданный create.sh, и сохраните его на вашей системе, например, на диск E:
/etc/pki/CA/myssl/client.pem
/etc/pki/CA/myssl/client.crt
/etc/pki/CA/myssl/nginx.crt
Запустите метод main класса com.liuzy.test.HttpsTest;
Посмотрите, результат получен!
```
# Вторая часть: Java реализация запроса сертификатов, подписи сертификатов и вывода и т. д.
- Необходимо импортировать библиотеки
- bcpkix-jdk15on-1.54.jar
- bcprov-jdk15on-1.54.jar
- Запустите метод main класса com.liuzy.test.CaTest, чтобы увидеть эффект
## Пример
- Выход private ключа me и pkcs8 private ключа
```java
KeyUtils.write2RsaKey(privateKey, testDir + "me.pem");
KeyUtils.write2PKCS8Key(privateKey, testDir + "me_pkcs8.pem");
```- Создание файла запроса сертификата для me
```java
// Информация пользователя
String subjectDN = "CN=me.com,OU=Моя компания,O=Моя компания,L=Шанхай,ST=Шанхай,C=CN";
// Алгоритм подписи
```java
// Определение алгоритма подписи
String signatureAlgorithm = "SHA1withRSA";
// Создание запроса на сертификат
PKCS10CertificationRequest csr = CertReqUtils.create(publicKey, privateKey, subjectDN, signatureAlgorithm);
// Сохранение запроса в файл
CertReqUtils.write(csr, testDir + "me.csr");
```
- Инициализация центра сертификации, передача CA приватного ключа и самоподписанного сертификата, а также выдача сертификата для me с использованием его публичного ключа и информации о нем
```java
// Инициализация ЦС 1
CACenter caCenter = new CACenter();
caCenter.init();
CertUtils.write(caCenter.getCacert(), testDir + "ca.crt");
KeyUtils.write2RsaKey(caCenter.getPrivateKey(), testDir + "ca.pem");
```// Выдача сертификата 1 на основе публичного ключа и информации о владельце
String subjectDN = "C=cn,ST=шанхай,L=шанхай,O=Моя компания,OU=Моя компания,CN=me.com";
Certificate newcert1 = caCenter.sign(publicKey, subjectDN);
CertUtils.write(newcert1, testDir + "newcert1.cer");
```
- Инициализация центра сертификации с использованием CA приватного ключа и самоподписанного сертификата, а затем выдача сертификата на основе запроса на сертификат
```java
// Инициализация ЦС Yöntem 2
CACenter caCenter = new CACenter();
caCenter.init(testDir + "ca.crt", testDir + "ca.pem");
// Выдача сертификата 2 на основе файла запроса на сертификат
CertificationRequest csr = CertReqUtils.read(testDir + "me.csr");
Certificate newcert2 = caCenter.sign(csr);
CertUtils.write(newcert2, testDir + "newcert2.cer");
```
- Чтение сертификата и вывод информации о сертификате
```java
// Чтение сертификата
Certificate cert = CertUtils.read(testDir + "newcert1.cer");
// Вывод информации о сертификате
CertUtils.print((X509Certificate) cert);
// Проверка сертификата
System.out.println(CertUtils.verify(cert));
```### Третья часть: использование Java-сертификатов сервером
- Запуск метода main класса `com.liuzy.test.MyServer`, который создает и сохраняет сертификаты и другие файлы
- Загрузка сертификатов на сервер
```shell
# Логин как liuzyzy или обычный пользователь
mkdir ssl
# Загрузите файлы ca.crt, nginx.crt и nginx.pem в эту директорию
```
- Изменение конфигурации Nginx пользователем root
```
# Прокомментируйте три старых строки, добавьте следующие
ssl_certificate /home/liuzyzy/ssl/nginx.crt;
ssl_certificate_key /home/liuzyzy/ssl/nginx.pem;
ssl_client_certificate /home/liuzyzy/ssl/ca.crt;
# Применение конфигурации
nginx -s reload
```
- Запуск метода main класса `com.liuzy.test.HttpsTest` для отправки запроса на сервер
```
Поздравляем вас! Успешный вывод данных:
[GET] https://www.liuzy.com
[RESULT] {"name": "liuzy", "QQ": "416657468"}
```### Четвертая часть: графический инструмент для выпуска сертификатов на Java
- Главное окно — выбор ЦС

- Главное окно — генерация ЦС

- Центр сертификационных authority
! [Центр сертификационных authority](https://liuzy88.com/files/ks3.jpg)
- Импорт сертификатов и ключей в хранилище
! [Импорт сертификатов и ключей в хранилище](https://liuzy88.com/files/ks4.jpg)
- Экспорт сертификатов и ключей из хранилища
! [Экспорт сертификатов и ключей из хранилища](https://liuzy88.com/files/ks5.jpg)
- Просмотр информации о хранилище
! [Просмотр информации о хранилище](https://liuzy88.com/files/ks6.jpg)
Корректировки:
- Изменены названия некоторых изображений для согласованности.
- Устранены ошибки в пунктуации и оформлении текста.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )