2016-10-19 2 views
1

Извините, что вы открыли другой вопрос с той же темой, но я думаю, что этот вопрос будет раздуть other one в забвение.Настройка, чтобы избежать ошибки в построении пути PKIX

Я столкнулся с указанным сообщением об ошибке, которое довольно неспецифично (по крайней мере, для меня). Отладочный вывод показывает, что сертификаты загружены, а затем только указанная ошибка. Я сгенерировал тестовый сертификат со своей собственной цепочкой CA: CA -> SubCA -> ClientCert

Я пытаюсь подключить клиента и сервер на одном компьютере (для проверки двустороннего протокола) с помощью SSL.

я произвожу мои CA сертификаты, используя следующие команды:

openssl req -batch -x509 -config ${ROOTCA_CONFIG} -newkey rsa:2048 -sha1 -nodes -out ${ROOTCA_CERT} -outform PEM -days 7300 
openssl req -batch -config ${SUBCA_CONFIG} -newkey rsa:2048 -sha1 -nodes -out ${SUBCA_CSR} -outform PEM 
openssl ca -batch -config ${ROOTCA_CONFIG} -policy signing_policy -extensions signing_req_CA -out ${SUBCA_CERT} -infiles ${SUBCA_CSR} 

Они, кажется, в порядке. Единственное, что меня озадачивает: если объединить оба сертификата в один файл и проверить их с помощью этой цепочки, это нормально. Если он пытается проверить только с помощью subCA или корневого CA, проверка завершается с ошибкой.

Затем я создаю мой клиент/сервер серт:

openssl req -batch -config ${CLIENT_CONFIG} -newkey rsa:2048 -sha256 -nodes -out ${CLIENT_CSR} -outform PEM -keyout $1.key 
openssl ca -batch -config ${SUBCA_CONFIG} -policy signing_policy -extensions signing_req -out ${CLIENT_CERT} -infiles ${CLIENT_CSR} 

С этим я создать файл PKCS12 использовать в моем хранилище:

openssl pkcs12 -export -inkey ${CONNECTOR_KEY} -in ${CONNECTOR_CERT} -out ${CONNECTOR_P12} 

Я делаю это, называя мой сценарий дважды, один раз для сервера и один раз для клиента. Назовем их client.cert и server.cert, даже если клиент/сервер запутывается, поскольку оба они являются конечными точками локального протокола.

я затем использовать эти команды для создания доверенных сертификатов и хранилища ключей для клиента и сервера:

keytool -keystore $2-truststore.jks -importcert -alias ca -file test_ca_certs/rootca.cert 
keytool -keystore $2-truststore.jks -importcert -alias subca -file test_ca_certs/subca.cert 
keytool -v -importkeystore -srckeystore $1 -srcstoretype PKCS12 -destkeystore $2-keystore.jks -deststoretype JKS 

Пусть $ 2 будет клиент и сервер каждый (сервер-доверенное хранилище и т.д.) и $ 1 такие же, как $ {CONNECTOR_P12 } before (somefile.p12)

Итак, теперь у меня есть доверительная сеть с CA и SubCA и хранилище ключей с токеном PKCS12. Truststore одинаково на стороне клиента и сервера, токен почти такой же, но имеет разные ключевые пары, поскольку они генерируются каждый раз.

Выход SSL отладки указывает на сертификаты загружаются:

keystore (...) has type [jks], and contains aliases [1]. 
*** 
found key for : 1 
chain [0] = [ 
[ 
    Version: V3 
    Subject: CN=cnname, OU=ouname, O=oname, L=location, ST=bavaria, C=DE 
    Signature Algorithm: SHA256withRSA, OID = 1.2.840.113549.1.1.11 

    Key: Sun RSA public key, 2048 bits 
    modulus: 2999... 
    public exponent: 65537 
... 
... 
keystore has type [jks], and contains aliases [ca, subca]. 
adding as trusted cert: 
    Subject: CN=my Root CA 2016, O=organization, C=DE 
    Issuer: CN=my Root CA 2016, O=organization, C=DE 
    Algorithm: RSA; Serial number: 0xfc8239c0355555c1 
    Valid from Wed Oct 19 10:14:36 CEST 2016 until Tue Oct 14 10:14:36 CEST 2036 

adding as trusted cert: 
    Subject: CN=my SubCA 2016, O=Fraunhofer, C=DE 
    Issuer: CN=my Root CA 2016, O=Fraunhofer, C=DE 
    Algorithm: RSA; Serial number: 0x1 
    Valid from Wed Oct 19 10:14:38 CEST 2016 until Thu Oct 17 10:14:38 CEST 2024 

Есть некоторые общие изъян в моем понимании? Опять же, извините за сообщение двух вопросов, но я начинаю верить, что делаю что-то неправильно более фундаментальным образом. Благодаря!

ответ

1

Я наконец нашел решение. Я только отлаживаю SSL. Это была моя ошибка. Мне нужно было бы настроить вывод отладки на «все». Тогда я могу видеть это сообщение об ошибке:

Вызванный: sun.security.validator.ValidatorException: Расширенный ключ использование не позволяет использовать для аутентификации сервера TLS

Это гораздо более конкретный характер. Чтобы исправить это, мне действительно нужно было изменить использование моего расширенного ключа на это:

keyUsage   = digitalSignature, keyEncipherment, nonRepudiation 
extendedKeyUsage = clientAuth, serverAuth 

Большое спасибо!

Смежные вопросы