Самостоятельный SSL-сертификат Tomcat Server / Client

У меня есть сервер Apache Tomcat 6.x с самоподписанным сертификатом SSL. Я хочу, чтобы клиент представил свой сертификат на сервер, чтобы я мог аутентифицировать их на основе базы данных пользователей. Я все это работаю на примере, который я нашел в Интернете, но в примере появились консервированные сертификаты и хранилище данных JKS с предварительной сборкой. Я хочу создать собственное хранилище данных со своими сертификатами, но мне не повезло.

Как создать хранилище данных для Tomcat?
Как создать самозаверяющий сертификат для Tomcat?

Как создать самозаверяющий сертификат для клиента?
Как заставить Tomcat доверять подписи клиента?

Я уже много часов играю с java keytool.

Наконец, я получил решение своей проблемы, поэтому опубликую результаты здесь, если кто-нибудь застрянет.

Благодаря Майклу Мартину из «Software Thoughts & Ramblings» Майкла, я обнаружил, что:

keytool по умолчанию использует алгоритм DSA при создании самозаверяющего сертификата. Более ранние версии Firefox без проблем решали эти ключи. С Firefox 3 beta 5 использование DSA не работает, но использование RSA делает. Передача «-keyalg RSA» при создании самозаверяющего сертификата создает сертификат, который полностью одобряет Firefox 3 beta 5.

Я просто установил этот флаг, очистил все кеши в FireFox, и он работал как шарм! Я использую это как тестовую настройку для своего проекта, и мне нужно поделиться этим с другими людьми, поэтому я написал небольшой пакетный скрипт, который создает два сертификата SSL. Можно добавить в программу Tomcat, а другой – файл .p12, который можно импортировать в FireFox / IE. Благодаря!

Использование: первый аргумент командной строки – это имя пользователя клиента. Все пароли являются «паролем» (без котировок). Измените любой из жестко закодированных битов, чтобы удовлетворить ваши потребности.

@echo off if "%1" == "" goto usage keytool -genkeypair -alias servercert -keyalg RSA -dname "CN=Web Server,OU=Unit,O=Organization,L=City,S=State,C=US" -keypass password -keystore server.jks -storepass password keytool -genkeypair -alias %1 -keystore %1.p12 -storetype pkcs12 -keyalg RSA -dname "CN=%1,OU=Unit,O=Organization,L=City,S=State,C=US" -keypass password -storepass password keytool -exportcert -alias %1 -file %1.cer -keystore %1.p12 -storetype pkcs12 -storepass password keytool -importcert -keystore server.jks -alias %1 -file %1.cer -v -trustcacerts -noprompt -storepass password keytool -list -v -keystore server.jks -storepass password del %1.cer goto end :usage echo Need user id as first argument: generate_keystore [username] goto end :end pause 

Результатом является два файла. Один из них называется server.jks, который вы бросаете в Tomcat и другой файл с именем {username} .p12, который вы импортируете в свой браузер. Файл server.jks имеет сертификат клиента, добавленный как доверенный сертификат.

Я надеюсь, что кто-то найдет это полезным.

И вот XML, который нужно добавить в ваш файл Tomcat conf / sever.xml (тестируется только на Tomcat 6.x)

  

Для Tomcat 7:

  

Чтобы включить аутентификацию клиента, вам необходимо указать «хранилище доверия» для Tomcat: хранилище ключей, содержащее сертификаты от корневых центров сертификации, которым вы доверяете, каждый из которых помечен как «trustEntry».

Это определяется атрибутами элемента Connector : truststoreFile , truststorePass (который по умолчанию имеет значение keystorePass ) и truststoreType (по умолчанию используется «JKS»).

Если клиент использует самозаверяющий сертификат, то его «корневым» ЦС является сам сертификат; из этого следует, что вам нужно импортировать самозаверяющий сертификат клиента в хранилище доверия Tomcat.

Если у вас много клиентов, это быстро станет хлопот. В этом случае вы можете захотеть ознакомиться с подписью сертификатов для своих клиентов. Команда Java keytool не может этого сделать, но все необходимые утилиты командной строки доступны в OpenSSL. Или вы могли бы взглянуть на нечто вроде EJBCA в больших масштабах.

Еще лучше попросите своих клиентов использовать существующий бесплатный центр сертификации, например startcom.org . Это не всегда работает для сертификатов сервера, поскольку сертификат StartCom не включен во все браузеры, но эта ситуация отменена, и корневой сертификат StartCom можно легко импортировать в хранилище доверия Tomcat.

Создать сертификат:

 keytool -genkey -alias tomcat -keyalg RSA -keystore /home/bob/mykeystore 

Введите все данные для самоподписанного сертификата, которые вам нужны, затем отредактируйте файл server.xml Tomcat и укажите свойства хранилища ключей на соединителе SSL, например:

  

или следуйте за документами Tomcat …

http://tomcat.apache.org/tomcat-6.0-doc/ssl-howto.html

Предыдущие ответы полезны для меня, но не имеют версии оболочки. Поэтому я написал один.

key_gen.sh:

 #! /bin/bash # a key generator for https, basename=server key_algorithm=RSA password_key=123456 password_store=123456 country=US # clean - pre rm "${basename}.jks" # generate server side keytool -genkeypair -alias "${basename}cert" -keyalg $key_algorithm -dname "CN=Web Server,OU=Unit,O=Organization,L=City,S=State,C=${country}" -keypass $password_key -keystore "${basename}.jks" -storepass $password_store 

Для tomcat8 можно добавить следующую конфигурацию server.xml :

   
  • Как добавить родную библиотеку в Tomcat?
  • Как развернуть mutiple web-приложение в tomcat, которое будет работать на разных портах?
  • Как прочитать файл манифеста для webapp, запущенного в apache tomcat?
  • Максимальный допустимый размер HttpRequest в tomcat?
  • Несколько портов (8005, 8080, 8009), требуемых Tomcat Server на локальном хосте, уже используются
  • java.lang.NoClassDefFoundError: javax / servlet / http / HttpServletRequest
  • Фильтр Tomcat CORS
  • Обмен данными сеанса между контекстами в Tomcat
  • Как я могу указать свойства системы в конфигурации Tomcat при запуске?
  • Множественные выборки с типом EAGER в Hibernate с JPA
  • Нет типов Spring WebApplicationInitializer, обнаруженных на пути к classам
  • Давайте будем гением компьютера.