Puede configurar la seguridad gestionada por aplicación o por contenedor para las conexiones de MongoDB en Liberty.
Acerca de esta tarea
Puede proteger aplicaciones MongoDB utilizando la seguridad gestionada por aplicación, la seguridad gestionada por contenedor, la seguridad gestionada por SSL o la autenticación de certificado. Para todos los tipos de seguridad, el servidor MongoDB se debe estar ejecutando con la autenticación que está habilitada explícitamente para proteger conexiones de MongoDB.
Procedimiento
- Configure la seguridad gestionada por aplicación para MongoDB.
Si el elemento de configuración mongo no especifica los atributos de usuario y contraseña, el producto supone que una aplicación está utilizando la seguridad gestionada por aplicación o que no está utilizando la seguridad. Para habilitar la seguridad gestionada por aplicación, la aplicación debe autenticarse utilizando las API de MongoDB, por ejemplo:
<mongo id="mongo1" libraryRef="MongoLib" />
<mongoDB jndiName="mongo/testdb" mongoRef="mongo1" databaseName="db-test-1"/>
{
...
// Java snippet
@Resource(name = "mongo/testdb")
protected DB db;
private void auth() {
if (!db.isAuthenticated())
db.authenticate("user", "password".toCharArray());
}
...
}
- Configure la seguridad gestionada por contenedor para MongoDB.
Para utilizar la seguridad gestionada por contenedor, el elemento de configuración mongo debe especificar un usuario y una contraseña. Sólo se permite un usuario para cada configuración de mongo. Todas las instancias de MongoDB utilizan el usuario y la contraseña especificados. Por ejemplo, todas las instancias de MongoDB que hacen referencia a mongo1 en el ejemplo siguiente utilizan mongoUserName y pw:
<mongo id="mongo1" libraryRef="MongoLib" user="mongoUserName" password="pw"/>
<mongoDB jndiName="mongo/testdb" mongoRef="mongo1" databaseName="db-test-1"/>
<mongoDB jndiName="mongo/testdb2" mongoRef="mongo1" databaseName="db-test-2"/>
Las aplicaciones que utilizan la seguridad gestionada por contenedor no deben invocar com.mongodb.DB.authenticate(user, pass).
Cree una conexión SSL entre Liberty
y el servidor MongoDB. Para crear una conexión SSL entre Liberty y el servidor MongoDB, añada la característica ssl-1.0 de
Liberty en el archivo
server.xml y especifique sslEnabled="true" en el elemento de configuración de MongoDB. SSL debe estar habilitado explícitamente en el servidor MongoDB para garantizar que las conexiones están cifradas.
<featureManager>
<feature>mongodb-2.0</feature>
<feature>ssl-1.0</feature>
</featureManager>
<mongo id="mongo3" libraryRef="MongoLib" user="mongoUserName" password="pw" sslEnabled="true"/>
<mongoDB jndiName="mongo/testdb3" mongoRef="mongo3" databaseName="db-test-3" />
Utilice una configuración SSL personalizada. Para utilizar una configuración SSL personalizada, que, por ejemplo, se podría utilizar para especificar un almacén de confianza, añada el atributo sslRef al elemento de configuración de MongoDB. Utilice el atributo
sslRef para especificar una configuración SSL, que se puede configurar en el archivo
server.xml.
<featureManager>
<feature>mongodb-2.0</feature>
<feature>ssl-1.0</feature>
</featureManager>
<keyStore id="myTrustStore" password="truststorepw" location="${server.output.dir}/resources/security/trustStore.jks"></keyStore>
<ssl id="mySSLConfig" keyStoreRef="myTrustStore" />
<mongo id="mongo4" libraryRef="MongoLib" user="mongoUserName" password="mongopw" sslEnabled="true" sslRef="mySSLConfig"/>
<mongoDB jndiName="mongo/testdb4" mongoRef="mongo4" databaseName="db-test-4" />
Utilizar autenticación de certificado Para configurar el uso de la autenticación de certificado con MongoDB, añada
useCertificateAuthentication y elimine
userid y
password:
<featureManager>
<feature>mongodb-2.0</feature>
<feature>ssl-1.0</feature>
</featureManager>
<keyStore id="myTrustStore" password="truststorepw" location="${server.output.dir}/resources/security/trustStore.jks"></keyStore>
<keyStore id="myKeyStore" password="keystorepw" location="${server.output.dir}/resources/security/keyStore.jks"></keyStore>
<ssl id="mySSLConfigCertAuth" trustStoreRef="myTrustStore" keyStoreRef="myKeyStore" clientKeyAlias="alias_name_of_key" />
<mongo id="mongo5" libraryRef="MongoLib" sslEnabled="true" sslRef="mySSLConfigCertAuth" useCertificateAuthentication="true" />
<mongoDB jndiName="mongo/testdb5" mongoRef="mongo5" databaseName="db-test-5" />
clientKeyAlias solo es necesario si el almacén de claves contiene varias claves. Si desea más información sobre cómo configurar el almacén de claves y el almacén de confianza, consulte la documentación de MongoDB.
Qué hacer a continuación
Asegúrese de que el servidor MongoDB esté en ejecución y, a continuación, pruebe la seguridad de MongoDB desde la aplicación.