LINUX.ORG.RU

Сообщения moon-duck

 

OpenSSL verify chain cerificate and CRL

Здравствуйте, не уверен, что если спросить кратко, то будет понятна суть вопроса, поэтому я изложу по порядку:

Цель:

  • Развернуть на ноутбуке (не подключенном к сети) с Windows 7 центр сертификации на OpenSSL
  • Развернуть на сервере freeRADIUS2 для EAP-TLS аутентификации мобильных терминалов

Шаги по воплощению:
1. устанавливаю дистрибутив OpenSSL 0.9.8y 2. Генерирую корневй ключ и сертификат:

openssl req -new -x509 -keyout ca_wifi.key -out ca_wifi.pem -days 8500 -config ca_wifi.cnf
openssl x509 -inform PEM -outform DER -in ca_wifi.pem -out ca_wifi.der
3. Генерирую ключ и сертификат (подписанный корневым ключом) для RADIUS сервера:
openssl req    -new -out server_radius.csr -keyout server_radius.key -config server_radius.cnf
openssl ca     -batch -keyfile ca_wifi.key -cert ca_wifi.pem -in server_radius.csr  -key %PASSWORD_CA% -out server_radius.crt -extensions xpserver_ext -extfile xpextensions -config ca_wifi.cnf
openssl pkcs12 -export -in server_radius.crt -inkey server_radius.key -out server_radius.p12  -passin pass:%PASSWORD_SRV% -passout pass:%PASSWORD_SRV%
openssl pkcs12 -in server_radius.p12 -out server_radius.pem -passin pass:%PASSWORD_SRV% -passout pass:%PASSWORD_SRV%
openssl verify -CAfile ca_wifi.pem server_radius.pem
4. Генерирую ключ и сертификат (подписанный корневым ключом) для первого клиента:
openssl req    -new  -out motorola001.csr -keyout motorola001.key -config motorola001
openssl ca     -batch -keyfile ca_wifi.key -cert ca_wifi.pem -in motorola001.csr -key %PASSWORD_CA% -out motorola001.crt -extensions xpclient_ext -extfile xpextensions -config ca_wifi.cnf
openssl pkcs12 -export -in motorola001.crt -inkey motorola001.key -out motorola001.p12 -passin pass:%PASSWORD_CLNT001% -passout pass:%PASSWORD_CLNT001%
openssl pkcs12 -in motorola001.p12 -out motorola001.pem -passin pass:%PASSWORD_CLNT001% -passout pass:%PASSWORD_CLNT001%
openssl verify -CAfile ca_wifi.pem motorola001.pem
5. Генерирую списк отозванных сертификатов (CRL):
openssl ca -gencrl -keyfile ca_wifi.key -key %PASSWORD_CA% -cert ca_wifi.pem -out crl_wifi.pem -config ca_wifi.cnf
6. Сливаю файл корневого сертификата и файл со списком отозванных сертификатов в один:
TYPE ca_wifi.pem crl_wifi.pem > ca_and_crl_wifi.pem
7. Копируем на сервер c freeRADIUS2 файлы: server_aztpa_radius.pem и ca_and_crl_aztpa_wifi.pem
8. Конфигурирую freeRADIUS2 и в eap.conf прописываю:
	...
	private_key_password = *****
	private_key_file = ${certdir}/server_aztpa_radius.pem
	certificate_file = ${certdir}/server_aztpa_radius.pem
	CA_file = ${cadir}/ca_and_crl_aztpa_wifi.pem
	dh_file = ${certdir}/dh
	check_crl = yes
	...
9. Всё наступает «счастье», что можно проверить командой (если скопировать туда motorola001.pem):
openssl verify -crl_check -CAfile ca_and_crl_aztpa_wifi.pem motorola001.pem
Идея такова, что в случае отзыва клиентского сертификата, сертификат выполняется отзыв на ноутбуке, после чего по новой генерируется CRL и на RADIUS сервер передается обновленный ca_and_crl_wifi.pem, freeRADIUS2 при этом нужно рестартовывать, но это не критично.
Вопрос: как добиться такого же «счастья» если я подписываю сертификат клиента не корневым ключом, а, например, серверным?
Т.е. генерирую ключ и сертификат (подписанный серверным ключом) для второго клиента:
openssl req    -new  -out motorola002.csr -keyout motorola002.key -config motorola002.cnf
openssl ca     -batch -keyfile server_radius.key -cert server_radius.pem -in motorola002.csr -key %PASSWORD_SRV% -out motorola002.crt -extensions xpclient_ext -extfile xpextensions -config server_radius.cnf
openssl pkcs12 -export -in motorola002.crt -inkey motorola002.key -out motorola002.p12 -passin pass:%PASSWORD_CLNT002% -passout pass:%PASSWORD_CLNT002%
openssl pkcs12 -in motorola002.p12 -out motorola002.pem -passin pass:%PASSWORD_CLNT002% -passout pass:%PASSWORD_CLNT002%
Сливаю файл корневого и серверного сертификата в один:
TYPE ca_wifi.pem server_radius.pem > ca_and_server_wifi.pem
Проверка без CRL_check работает:
openssl verify -CAfile ca_and_server_wifi.pem motorola002.pem
А вот CRL подключить не удается:
TYPE ca_wifi.pem server_radius.pem crl_wifi.pem > ca_and_server_and_crl_wifi.pem
openssl verify -crl_check -CAfile ca_and_server_and_crl_wifi.pem motorola002.pem
openssl говорит: 3 X509_V_ERR_UNABLE_TO_GET_CRL: unable to get certificate CRL
:-(
а если сливать так:
TYPE ca_wifi.pem crl_wifi.pem > ca_and_crl_wifi.pem
openssl verify -crl_check -CAfile ca_and_crl_wifi.pem motorola002.pem
openssl говорит: 26 X509_V_ERR_INVALID_PURPOSE: unsupported certificate purpose

Собственно как openssl`у сказать что бы он и chain cerificate проверил и CRL?

moon-duck
()

RSS подписка на новые темы