1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/liuzy1988-KS

В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Первый раздел: полный пример двусторонней аутентификации сервера и клиента

  • В тестах использовалась виртуальная машина VMware с CentOS 6.5
  • Создание корневого сертификата (CA) с помощью OpenSSL, генерация приватного ключа, публичного ключа и самоподписанного сертификата;
  • Подпись сертификата Nginx сервера с помощью OpenSSL;
  • Подпись сертификата клиента с помощью OpenSSL;
  • Установка и конфигурация сервера Nginx, переход от односторонней до двусторонней аутентификации шаг за шагом;
  • Установка и конфигурация среды NodeJS, создание проекта Node.js и возврат JSON

Выполнение скриптов под root

  • Выполнение clear.sh
Очистка CA ключей и подписанных сертификатов
  • Выполнение create.sh
Для создания 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 для подтверждения
  • Выполнение nginx.sh
Откройте браузер и введите IP хоста, чтобы получить доступ к главной странице Nginx
  • Выполнение nodejs.sh```markdown sh
Установлены NodeJS, генератор проекта и запущено приложение в фоновом режиме

Вход под учетной записью liuzy или обычного пользователя

  • Создайте проект
# Создайте новый проект 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
- Главное окно — выбор ЦС
![Главное окно](https://liuzy88.com/files/ks1.jpg)
- Главное окно — генерация ЦС
![Главное окно](https://liuzy88.com/files/ks2.jpg)
- Центр сертификационных 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 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/liuzy1988-KS.git
git@api.gitlife.ru:oschina-mirror/liuzy1988-KS.git
oschina-mirror
liuzy1988-KS
liuzy1988-KS
master