Vous pouvez configurer la sécurité gérée par application ou gérée par conteneur pour les connexions MongoDB dans Liberty.
Pourquoi et quand exécuter cette tâche
Vous pouvez sécuriser les applications MongoDB à l'aide de la sécurité géré par les applications, la sécurité gérée par les conteneurs, la sécurité gérée par SSL ou
l'authentification par certificat. Pour tous les types de sécurité, le serveur MongoDB doit être exécuté avec une authentification qui soit explicitement activée pour sécuriser les connexions
MongoDB.
Procédure
- Configurez la sécurité gérée par application pour MongoDB.
Si l'élément de configuration mongo ne spécifie pas d'attributs utilisateur et mot de passe, le produit part du principe qu'une application utilise la sécurité gérée par application ou n'utilise pas de sécurité. Pour activer la sécurité gérée par application, l'application doit s'authentifier à
l'aide des API MongoDB, par exemple :
<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());
}
...
}
- Configurez la sécurité gérée par conteneur pour MongoDB.
Pour que la sécurité gérée par conteneur puisse être appliquée, l'élément de configuration mongo doit spécifier un utilisateur et un mot de passe. Un utilisateur seulement est autorisé pour chaque configuration mongo. Toutes les instances MongoDB utilisent l'utilisateur et le mot de passe spécifiés. Par exemple, toutes les instances MongoDB qui référencent mongo1 dans l'exemple suivant utilisent mongoUserName et 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"/>
Applications that use container-managed security must not call com.mongodb.DB.authenticate(user, pass).
Create an SSL connection between Liberty
and the MongoDB server. To create an SSL connection between Liberty and the MongoDB server, add the ssl-1.0
Liberty feature in the
server.xml file and specify sslEnabled="true" on the MongoDB
configuration element. SSL must be explicitly enabled on the MongoDB server to ensure that
connections are encrypted.
<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" />
Utilisez une configuration SSL personnalisée. Pour utiliser une configuration SSL personnalisée qui, par exemple,
pourrait servir à spécifier un magasin de clés de confiance (trustore),
ajoutez l'attribut sslRef à l'élément de configuration MongoDB. Utilisez cet attribut pour spécifier une configuration SSL, laquelle peut
être définie dans le fichier
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" />
Utilisez l'authentification par certificat. Pour configurer l'utilisation de l'authentification par certificat avec MongoDB, ajoutez
useCertificateAuthentication ou supprimez
userid
et
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 est uniquement requis si le magasin de clés contient plusieurs clés. Pour en savoir plus sur la configuration du magasin de clé et du magasin de clés de
confiance, reportez-vous à la documentation de MongoDB.
Que faire ensuite
Vérifiez que le serveur MongoDB s'exécute, puis testez la sécurité MongoDB depuis votre application.