Алексей Комягин, инженер по техническому обслуживанию MongoDB
Настройка аутентификации Kerberos и шифрования SSL в Java-приложении MongoDB не так проста, как в других языках. В этой статье я покажу вам, как создать Java-приложение с Kerberos и SSL, которое взаимодействует с MongoDB.
Моя оригинальная установка состоит из следующего:
1) Сервер KDC:
kdc.mongotest.com
Файл конфигурации kerberos (/etc/krb5.conf):
[logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] default_realm = MONGOTEST.COM dns_lookup_realm = false dns_lookup_kdc = false ticket_lifetime = 24h renew_lifetime = 7d forwardable = true [realms] MONGOTEST.COM = { kdc = kdc.mongotest.com admin_server = kdc.mongotest.com } [domain_realm] .mongotest.com = MONGOTEST.COM mongotest.com = MONGOTEST.COM
KDC имеет следующие принципы:
- [email protected] — принцип пользователя (для Java-приложения)
- mongodb/[email protected] — принцип обслуживания (для сервера mongodb)
2) Сервер MongoDB:
rhel64.mongotest.com
MongoDB версия: 2.6.0
Конфигурационный файл MongoDB:
dbpath=<some path> logpath=<some path> fork=true auth = true setParameter = authenticationMechanisms=GSSAPI sslOnNormalPorts = true sslPEMKeyFile = /etc/ssl/mongodb.pem
Этот сервер также имеет глобальную переменную среды, $KRB5_KTNAME
установленную в файл keytab, экспортированный из KDC.
Пользователь приложения настраивается в базе данных администратора следующим образом:
{ "_id" : "[email protected]", "user" : "[email protected]", "db" : "$external", "credentials" : { "external" : true }, "roles" : [ { "role" : "readWrite", "db" : "test" } ] }
Загрузите драйвер Java:
wget http://central.maven.org/maven2/org/mongodb/mongo-java-driver/2.12.1/mongo-java-driver-2.12.1.jar
Установите Java и JDK:
sudo yum install java-1.7.0
sudo yum install java-1.7.0-devel
Создайте хранилище сертификатов для Java и сохраните там сертификат сервера, чтобы Java знала, кому она должна доверять:
keytool -importcert -file mongodb.crt -alias mongoCert -keystore firstTrustStore
(mongodb.crt является частью публичного сертификата mongodb.pem)
Скопируйте файл конфигурации kerberos на сервер приложений: /etc/krb5.conf
или «« C: \ WINDOWS \ krb5.ini »` (в противном случае вам придется указать kdc и realm в качестве параметров времени выполнения Java)
Используйте kinit для хранения основного пароля на сервере приложений:
kinit [email protected]
В качестве альтернативы kinit вы можете использовать JAAS для кэширования учетных данных kerberos.
Скомпилируйте и запустите программу Java
javac -cp ../mongo-java-driver-2.12.1.jar SSLApp.java java -cp .:../mongo-java-driver-2.12.1.jar -Djavax.net.ssl.trustStore=firstTrustStore -Djavax.net.ssl.trustStorePassword=changeme -Djavax.security.auth.useSubjectCredsOnly=false SSLApp
Важно указать useSubjectCredsOnly=false
, в противном случае вы получите исключение «Не предоставлены действительные учетные данные (уровень механизма: не удалось найти любой Kerberos tgt)» из Java. Как мы обнаружили, это не является строго обязательным во всех случаях, но это если вы полагаетесь на kinit для получения сервисного билета.
Драйвер Java должен создать имя участника службы MongoDB для запроса билета Kerberos. Принципал службы создается на основе предоставленного вами имени сервера (если вы явно не попросили канонизировать имя сервера). Например, если я перейду rhel64.mongotest.com
на IP-адрес хоста в URI соединения, я получу исключения Kerberos. Недопустимые учетные данные предоставлены (уровень механизма: сервер не найден в базе данных Kerberos (7) — UNKNOWN_SERVER)]. Поэтому убедитесь, что вы указали то же имя хоста сервера, которое вы использовали в принципале Kerberos (). Добавление -Dsun.security.krb5.debug=true
опций времени выполнения Java очень помогает в отладке проблем с аутентификацией Kerberos.
Эти шаги должны помочь упростить процесс подключения приложений Java с помощью SSL. Перед развертыванием любого приложения с MongoDB обязательно ознакомьтесь с нашими 12 советами по началу работы и контрольным списком безопасности, в котором изложены рекомендуемые меры безопасности для защиты вашей установки MongoDB. Более подробную информацию о настройке MongoDB Security можно найти в руководстве MongoDB .
Для дальнейших вопросов, не стесняйтесь связаться с командой MongoDB через Google-группы .