Как установить SSL на Tomcat 7?

Я знаю, что этот вопрос может показаться слишком простым, и я должен был прочитать все документы, доступные в Интернете, правда в том, что я сделал, и мне не повезло, это своего рода путаница для меня, я много раз устанавливал эту вещь, но для Apache, никогда для Tomcat.

Я хочу установить сертификат от GoDaddy, поэтому я следовал этой инструкции

http://support.godaddy.com/help/article/5239/generating-a-csr-and-installing-an-ssl-certificate-in-tomcat-4x5x6x

Я создал свой ключевой файл, как это

keytool -keysize 2048 -genkey -alias tomcat -keyalg RSA -keystore tomcat.keystore
keytool -certreq -keyalg RSA -alias tomcat -file csr.csr -keystore tomcat.keystore

Я изменил tomcat для mydomain.com.. это неправильно?

Я создал хранилище ключей, позже csr, после этого возникает проблема, я добавляю в server.xml в папке config

<Connector port="8443" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
keystoreFile="path to your keystore file" keystorePass="changeit" clientAuth="false" sslProtocol="TLS"/>

Позже я импортировал сертификаты

keytool -import -alias root -keystore tomcat.keystore -trustcacerts -file valicert_class2_root.crt

и я сделал, но у меня нет gd_intermediate.crt и последний шаг

keytool -import -alias tomcat -keystore tomcat.keystore -trustcacerts -file <name of your certificate>

читая в других блогах, я видел, что они импортируют сюда crt, но tomcat - это пользователь, которого я должен оставить? или его например только??

В документах Tomcat я нашел это ( http://tomcat.apache.org/tomcat-7.0-doc/ssl-howto.html)

Загрузите цепной сертификат из центра сертификации, получившего сертификат keytool -import -alias root -keystore \ -trustcacerts -file

   And finally import your new Certificate
       keytool -import -alias tomcat -keystore <your_keystore_filename> \
-file <your_certificate_filename>

но я понятия не имею, что такое "цепной сертификат" ... кто-нибудь может мне помочь? Я действительно смущен и потерян. Я использую Tomcat7

Благодарю.

2 ответа

Я часами пытаюсь понять это, и вот плоды моего труда

проблема

Вы не можете создать действительное хранилище ключей Tomcat, используя файл ключей и ключей GoDaddy

Завиток может выглядеть так:

curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

Получение сценария

curl -O https://raw.github.com/ssstonebraker/braker-scripts/master/working-scripts/crt_to_keystore.sh
chmod +x crt_to_keystore.sh

Используя скрипт

./crt_to_keystore.sh <path_to_crt> <path_to_key>

RAW Содержание скрипта

#!/bin/bash
# Filename: crt_to_keystore.sh
# Description: create tomcat keystore from cert and key
# Usage: "Usage: ./crt_to_keystore.sh <path_to_crt> <path_to_key>"
# Author: Steve Stonebraker
# pretty printing functions
function print_status { echo -e "\x1B[01;34m[*]\x1B[0m $1"; }
function print_good { echo -e "\x1B[01;32m[*]\x1B[0m $1"; }
function print_error { echo -e "\x1B[01;31m[*]\x1B[0m $1"; }
function print_notification { echo -e "\x1B[01;33m[*]\x1B[0m $1"; }
function printline { hr=-------------------------------------------------------------------------------------------------------------------------------
printf '%s\n' "${hr:0:${COLUMNS:-$(tput cols)}}"
}
####################################
# print message and exit program
function die { print_error "$1" >&2;exit 1; }
####################################
# function that is called when the script exits
function finish {
    [ -f $(dirname $0)/temp.p12 ] && shred -u $(dirname $0)/temp.p12;
}

#whenver the script exits call the function "finish"
trap finish EXIT
#######################################
# if file exists remove it
function move_file_if_exist {
  [ -e $1 ] && mv $1 $1.old && print_status "moved file $1 to $1.old";
}
#######################################
# Verify user provided valid file
function file_must_exist {
  [ ! -f $1 ] && die "$1 is not a valid file, please provide a valid file name!  Exiting....";
  print_status "$1 is a valid file"
}
#######################################
# Verify user provided two arguments
# Verify user provided two arguments
[ $# -ne 2 ] && die "Usage: ./crt_to_keystore.sh <path_to_crt> <path_to_key>";

# Assign user's provided input to variables
crt=$1
key=$2
#read -p "Provide password to export .crt and .key: " key_pw
read -p "Provide password for new keystore: " pw

# Define some Variables
readonly ourPath="$(dirname $0)"
readonly gdbundle="$ourPath/gd_bundle.crt"  
readonly keystore="$ourPath/tomcat.keystore"
readonly p12="$ourPath/temp.p12"
readonly KEYTOOL=$(which keytool)
readonly OPENSSL=$(which openssl)

#######################################
# Functions used by main execution
function gd_check_cert {
    # Verify gd_bundle.crt exists
    [ ! -f "$1" ] && print_error "$1 not found!  Downloading..." && wget https://certs.godaddy.com/repository/$1;
    [ ! -f "$1" ] && die "$1 must exist in current path!  Exiting....";
    [ -f "$1" ] && print_status "found $1 in current path"
}

function verify_before_execution {
    printline
    #verify godaddy cert
    gd_check_cert $gdbundle

    #Check to make sure the user provided valid files

    file_must_exist ${crt}
    file_must_exist ${key}

    move_file_if_exist ${keystore}
}

function import_godaddy_root {
    print_status "Importing gd_bundle.crt to java key store..."

    ${KEYTOOL} -import \
    -alias root \
    -keystore ${keystore} \
    -trustcacerts \
    -file ${gdbundle} \
    -keypass ${pw} \
    -storepass ${pw}  >/dev/null 2>/dev/null
    [ ! $? -eq 0 ] && die "Error running command... Exiting!";
}

function export_to_p12 {
    printline
    print_status "Exporting your key and cert to pkcs12 format..."
    ${OPENSSL} pkcs12 -export -chain -CAfile gd_bundle.crt -inkey ${key} -in ${crt} -out ${p12} -password pass:${pw}

    [ ! $? -eq 0 ] && die "Error running command... Exiting!";

}

function import_p12_file {
    print_status "Importing p12 file to java key store..."
    ${KEYTOOL} -importkeystore \
    -srcalias 1 \
    -destalias tomcat \
    -srckeystore ${p12} \
    -srcstoretype PKCS12 \
    -srcstorepass ${pw} \
    -destkeystore ${keystore} \
    -keypass ${pw} \
    -storepass ${pw} \
    -dest‐storepass ${pw} >/dev/null 2>/dev/null
    [ ! $? -eq 0 ] && die "Error running command... Exiting!";
}

function print_msg_after_creation {
    printline
    print_good "Keystore ${keystore} creation complete!"
    printline
    print_status "Don't forget to copy ${keystore} to /etc/tomcat7/tomcat.keystore and update server.xml"
    printline
}

#######################################
# Main Execution
verify_before_execution
export_to_p12
import_godaddy_root
import_p12_file
print_msg_after_creation

Источник: http://brakertech.com/convert-valid-godaddy-cert-key-to-java-keystore/

Постараюсь немного уточнить процедуру подписания:

  • Генерация ключа: вы создаете закрытый ключ
  • Генерация CSR: с помощью своего закрытого ключа вы создаете запрос в Центр сертификации, который содержит сертификат для подписи
  • Подпись CA: CA подписывает ваш сертификат и отправляет его обратно вам (теперь у него есть отпечаток пальца и около него).
  • импорт сертификата: импорт подписанного сертификата в хранилище ключей, что делает его доступным для Tomcat
  • импорт цепочки сертификатов: импортирует сертификаты, которые определяют цепочку доверия

CA может делегировать подпись, поэтому, чтобы быть уверенным, что подписанный сертификат действителен, клиенты должны иметь возможность проверять каждую идентификацию CA. (т. е. ваш сертификат подписан ca.contoso, и contoso использует verisign в качестве центра сертификации; клиент проверит затем contoso, а затем - verisign 1, если все в порядке, ваш сертификат считается действительным)

Другие вопросы по тегам