Самостоятельный 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 :

   
  • Есть ли способ запустить метод / class только при запуске Tomcat / Wildfly / Glassfish?
  • добавить параметры jvm в tomcat
  • Проверка бонуса @NotNull, @NotBlank и @NotEmpty не работают в JSF + Tomcat
  • Почему Intellij-IDEA игнорирует мой тег comcat / conf / server.xml Context?
  • Томкат в Идеи. война взорвалась: сервер не подключен. Развертывание недоступно
  • java.lang.IllegalArgumentException: указанный основной набор ресурсов недействителен
  • Путь JNDI Tomcat против Jboss
  • как получить MAC-адрес клиента от HttpServlet?
  • Установка свойства 'source' в 'org.eclipse.jst.jee.server: JSFTut' не нашел подходящего свойства
  • Почему драйвер JDBC должен быть помещен в папку TOMCAT_HOME / lib?
  • Пример Facebook Connect в JSP (tomcat)
  • Interesting Posts

    Установка показывает ошибку в консоли: УСТАНАВЛИВАЙТЕ НЕИСПРАВНОСТЬ ПОСТАВЩИКА КОНФЛИКТА

    Тип или имя пространства имен не существует в пространстве имен «System.Web.Mvc»

    Преобразование набора данных в XML

    MvvmCross Android – альтернатива привязке RelativeSource для команды button

    Изменяет ли атрибут привязки WPF маркер к streamу пользовательского интерфейса?

    Как я могу игнорировать свойство при сериализации с помощью DataContractSerializer?

    Как изменить реализацию (обход) функции, объявленной извне

    Темная тень на панели навигации во время перехода segue после обновления до Xcode 5.1 и iOS 7.1

    Почему подключение к удаленному рабочему столу меня отключает?

    Статический способ получить «Контекст» в Android?

    Динамический типичный ввод в Java

    Почему Windows 7 запрашивает дополнительные драйверы при установке с USB 3.0?

    Создавайте дружественные URL-адреса SEO (пули)

    Создание файла jar из файла Scala

    FFmpeg получает продолжительность видеофайла без метаданных

    Давайте будем гением компьютера.