Sitecore

Sitecore conectando a MongoDB mediante SSL

Después de configurar valid certificates in MongoDB es hora de establecer la comunicación desde Sitecore hacia MongoDB, y desafortunadamente Sitecore does not communicate with Mongo using SSL Out of the box.

Encontré un buen artículo que explica cómo lograr esto, sin embargo, no tengo experiencia en ello y tuve que pedir ayuda a mi colega Leonardo Faggiani

Nuestro primer intento exitoso fue usar un archivo PFX que requiere contraseña, pero el problema fue

Nadie quiere exponer la contraseña en archivos de configuración, ¡especialmente para un archivo PFX!

Entonces, empezamos a pensar en usar el Windows Certificate Store para recuperar el certificado. Y para lograrlo, necesitamos ampliar la clase UpdateMongoDriverSettingsProcessor para actualizar la configuración del Mongo Driver con el certificado SSL.

public class EnableSSL : UpdateMongoDriverSettingsProcessor – Este método permite a los usuarios activar/desactivar las configuraciones SSL.

[code language=”csharp”]
private bool UseSSL()
{
string value = Settings.GetSetting(“UseSSL”);
return !string.IsNullOrEmpty(value) && Convert.ToBoolean(value);
}

Método autoexplicativo
private StoreName? FindStoreName()
{
StoreName storeName = StoreName.My;
try
{
storeName = (StoreName)Enum.Parse(typeof(StoreName), Settings.GetSetting(“SSLCertificateStoreName”));
}
catch (Exception e)
{
Log.Error(“Error loading store certificate: Settings.GetSetting(SSLCertificateStoreName) ” + e.Message, this);
return null;
}

return storeName;
}
[/code]

El almacén de certificados debe estar abierto para poder encontrar el certificado.

[code language=”csharp”]
private X509Certificate2 FindX509Certificate2()
{
StoreName? nullableStoreName = FindStoreName();
if (nullableStoreName == null) return null;

X509Certificate2 firstCertificate = null;

StoreName storeName = (StoreName)nullableStoreName;
X509Store store = new X509Store(storeName, StoreLocation.LocalMachine);

try
{
store.Open(OpenFlags.MaxAllowed);

var certificates = store.Certificates.Find(X509FindType.FindByThumbprint, Settings.GetSetting(“SSLCertificateThumbprint”), false);
firstCertificate = certificates.Count > 0 ? certificates[0] : null;

if (firstCertificate == null)
Log.Warn(“Cannot find certificate with thumbprint ” + Settings.GetSetting(“SSLCertificateThumbprint”), this);
}
finally
{
store.Close();
}

return firstCertificate;
}
[/code]

Método sobrescrito que junta todas las piezas

[code language=”csharp”]
public override void UpdateSettings(UpdateMongoDriverSettingsArgs args)
{
if (UseSSL())
{
X509Certificate2 x509Certificate2 = FindX509Certificate2();

if (x509Certificate2 == null) return;

args.MongoSettings.SslSettings = new SslSettings();
args.MongoSettings.SslSettings.ClientCertificates = new[] { x509Certificate2 };
args.MongoSettings.SslSettings.CheckCertificateRevocation = false;
args.MongoSettings.SslSettings.EnabledSslProtocols = SslProtocols.Tls12;
args.MongoSettings.UseSsl = true;
}
}
[/code]

Finalmente, necesitamos un archivo .config para añadir esas configuraciones y empujar el código en la pipeline de Sitecore

 

   

     

        <patch:attribute name=”value”>true

     

     

        <patch:attribute name=”value”>My

     

     

        <patch:attribute name=”value”>33d567ffc26697605c31ebd4bd87c7254128f049

     

   

   

     

        <processor type=”Custom.MongoDriver.EnableSSL, Custom.MongoDriver” />

     

   

 

Una vez aplicado a la instalación de Sitecore, no funcionó desde el inicio y tras varias horas de resolución de problemas, esto es lo que encontramos para solucionarlo

La Solución

Abrir el Almacén de Certificados

1. Abre un símbolo del sistema y escribe mmc luego presiona Enter
2. En el menú Archivo, haz clic en Agregar o quitar complementos

MMC File Add Remove Snap-in Blog Vinicius Deschamps

3. Haz doble clic en Certificates

Add or Remove Snap-ins Certificates Blog Vinicius Deschamps

4. Selecciona Computer Account, y haz clic en Next

Select Computer Blog Vinicius Deschamps

5. Selecciona Local Computer, y haz clic en Finish y luego haz clic en OK para salir de la ventana de Snap-in

Select Computer Local Computer Blog Vinicius Deschamps

Administrar Permisos de la Clave Privada

Asumiendo que ya tienes la clave privada instalada y el Almacén de Certificados sigue abierto, sigue estos pasos

1. En el panel izquierdo de MMC, expande el nodo Certificates (Local Computer), expande el nodo Personal y luego selecciona la subcarpeta Certificates

MMC Personal Certificates Blog Vinicius Deschamps

2.  En el panel derecho, busca tu certificado – en mi caso es NLCVD2LAP @ Valtech – haz clic derecho en el certificado, elige Todas las Tareas y luego Administrar Claves Privadas.

MMC Certificates Manage Private Keys Blog Vinicius Deschamps

Una ventana de Permisos aparece, y tienes que agregar al usuario que ejecuta la Application Pool de tu instancia de Sitecore, que podría ser ApplicationPoolIdentity, NetworkService o una cuenta especial solo para eso.

3. Haz clic en Add en la ventana de Permissions, y concedamos privilegios al usuario de nuestra Application Pool

Select User or Groups Certificate Private Key Blog Vinicius Deschamps

Ten en cuenta que en mi caso Sitecore se estaba ejecutando con ApplicationPoolIdentity usando una ApplicationPool llamada sc82u3

4. Asegura que los permisos sean Full Control y Read solo para pruebas, luego haz clic en Ok

Permissions Certificate Private Key Blog Vinicius Deschamps

Una vez que hemos realizado los permisos, ¡la solución proporcionada por Leonardo, empezó a funcionar de inmediato!

¡Espero que les haya gustado y gracias por leer!

Nos vemos en mi próxima publicación!

Sitecore
Sitecore conectando a MongoDB mediante SSL — Vinicius Deschamps