2017-02-22 67 views
2

У нас есть JAVA-сервер и клиент, которые связывают сеть через SSL. Сервер и клиент взаимно аутентифицируют друг друга с помощью сертификатов. Тип хранилища ключей, используемый сервером и клиентом, - JKS. Имена файлов хранилища ключей и хранилища доверия для сервера и клиента: server.keystore, server.truststore, client.keystore и client.truststore.Как создать хранилище ключей и доверительное хранилище с использованием самозаверяющего сертификата?

Я использую самоподписанные сертификаты только для тестирования.

Вопросы:

Q1. Я хотел бы знать, почему мне нужно добавить собственные сертификаты сервера и клиента в свои соответствующие магазины, на этапе 6.

Q2. Могу ли я уменьшить число шагов для достижения того же? Если да, то как?

Шаги для создания ключа RSA, самозаверенные сертификаты, хранилища ключей и доверенных сертификатов для сервера

1. Сформировать частный RSA ключ

OpenSSL genrsa -out diagserverCA.key 2048

2. Создание сертификата x509

OpenSSL REQ -x509 -new -nodes -key diagserverCA.key -sha256 -days 1024 -out diagserverCA.pem

3. Создайте хранилище ключей PKCS12 из личного ключа и открытого сертификата.

OpenSSL PKCS12 -export -name сервер-CERT -в diagserverCA.pem -inkey diagserverCA.key отъезда serverkeystore.p12

4. Преобразование PKCS12 в хранилище ключей JKS хранилище ключей

Keytool - importkeystore -destkeystore server.keystore -srckeystore serverkeystore.p12 -srcstoretype pkcs12 -alias server-cert

5. Импортируйте сертификат клиента в хранилище доверия сервера.

Keytool -import -alias клиент-CERT -file diagclientCA.pem -keystore server.truststore

6. Импорт сертификата сервера в хранилище доверенных сервера.

Keytool -import -alias сервер-CERT -file diagserverCA.pem -keystore server.truststore

шаги, чтобы создать RSA секретный ключ, самостоятельно подписанный сертификат, хранилище ключей и доверенных сертификатов для клиента

1. Сформировать секретный ключ

OpenSSL genrsa отъезда diagclientCA.ключ 2048

2. Создание сертификата x509

OpenSSL REQ -x509 -new -nodes -key diagclientCA.key -sha256 -days 1024 -out diagclientCA.pem

3. Создать PKCS12 хранилище ключей от закрытого ключа и публичный сертификат.

OpenSSL PKCS12 -export -name клиент-CERT -в diagclientCA.pem -inkey diagclientCA.key отъезда clientkeystore.p12

4. Преобразование PKCS12 хранилища ключей в хранилище ключей JKS

Keytool -importkeystore -destkeystore client.keystore -srckeystore clientkeystore.p12 -srcstoretype pkcs12 -alias client-cert

5. Импортировать сертификат сервера в хранилище доверия клиента.

Keytool -import -alias сервер-CERT -file diagserverCA.pem -keystore client.truststore

6. Импорт сертификата клиента для клиента доверия магазин.

Keytool -import -alias клиент-CERT -file diagclientCA.pem -keystore client.truststore

+0

Stack Overflow - это сайт для вопросов программирования и развития. Этот вопрос кажется вне темы, потому что речь идет не о программировании или разработке. См. [Какие темы можно задать здесь] (http://stackoverflow.com/help/on-topic) в Справочном центре. Возможно, лучше сказать [Суперпользователь] (http://superuser.com/) или [Unix & Linux Stack Exchange] (http://unix.stackexchange.com/). Также см. [Где я пишу вопросы о Dev Ops?] (Http://meta.stackexchange.com/q/134306) – jww

+1

Также см. [Keytool создать доверенный самоподписанный сертификат] (http://stackoverflow.com/q/2200176/608639). – jww

ответ

1
  1. Вы не делаете.
  2. Вы можете сделать все с помощью keytool. Много документированных примеров. Вам вообще не нужно использовать openssl.

Критика:

  • В первой части, пункты 5 и 6 оба не правы. Должно быть один шаг: экспорт сертификата сервера в доверительный магазин клиента.
  • Аналогичным образом, во второй части шаги 5 и 6 снова ошибочны, и снова должен быть только шаг: экспорт сертификата клиента в хранилище ключей сервера.
  • Другими словами, два шага 5 должны быть взаимозаменяемы, а два этапа 6 удалены.

В документации JDK вы найдете правильные инструкции по выполнению партии в Справочном руководстве JSSE. Примерно три шага. Но все, что действительно нужно показать, это то, что самозаверяющие сертификаты действительно не стоят бумаги, на которой они напечатаны. Получите сертификаты, подписанные CA. Намного больше значения и намного проще развернуть (без шага экспорта).

Откуда у вас этот мусор?

+0

Я использую self-signed, потому что он используется в test env. Этот мусор, с которым я справляюсь после поиска в Интернете. Я новичок в этом и все еще путаюсь по этому вопросу. Я рассмотрю решение keytool. Я считаю, что ни один из перечисленных шагов никогда не подписывал сертификаты. – vic99

+0

@ vic99 Я спросил, где вы пришли, и «Интернет» не является достаточным ответом. Пожалуйста, предоставьте правильную ссылку. Шаг 2 создает самозаверяющий сертификат. Однако последующие шаги не касаются этого правильно. – EJP

+0

Пожалуйста, объясните мне, какая часть шага 2 заботится о подписании сертификата. – vic99

0

Q1. Я хотел бы знать, почему мне нужно добавить собственные сертификаты сервера и клиента в свои соответствующие магазины, на этапе 6.

A1. Если вы не используете общий центр сертификации, чтобы подписывать сертификаты своего клиента и сервера ... добавление каждого из них в хранилище доверия является единственным способом. Однако... , даже в тестовой среде вы можете создать свой собственный центр сертификации и использовать его для подписи созданных вами сертификатов Client и Server. Тогда в вашем хранилище доверия должен быть только открытый ключ для вашего центра сертификации.

Q2. Могу ли я уменьшить число шагов для достижения того же? Если да, то как?

A2. Да, используйте общий сертификат для подписания сертификатов клиента и сервера.

Ознакомиться с сценарием в this post, чтобы поэтапно создать собственный СА и использовать его для подписания сертификатов Сервера и Клиента. Он также создает ваш магазин доверия ...

Надеюсь, это поможет.

Best, Ace