Seleccionar página

El machine key sirve para que en servidores compartidos no exista problema entre varias aplicaciones instaladas en el mismo servidor.

Los típicos errores que muestra cuando hay un problema con el MachineKey se muestra a continuación:

Esta clave de máquina es una clave única que identifica la aplicación en el servidor, hay algunas formas de crearla. Utilizaré el PowerShell ya que no tengo acceso al Internet Information Server del servidor donde instalaré la aplicación, que es otra manera de crearla.

Los pasos son los siguientes:

  1. Abrir el PoweShell en modo Administrador.
PowerShell en modo Administrador

Luego de abrir el PowerShell, muestra un mensaje del sistema operativo, al cual se debe colocar ACEPTAR. Luego de esto tenemos una pantalla similar a esta:

2. Luego de tener abierta la pantalla de PowerShell, copiar el siguiente código:

function Generate-MachineKey {
  [CmdletBinding()]
  param (
    [ValidateSet("AES", "DES", "3DES")]
    [string]$decryptionAlgorithm = 'AES',
    [ValidateSet("MD5", "SHA1", "HMACSHA256", "HMACSHA384", "HMACSHA512")]
    [string]$validationAlgorithm = 'HMACSHA256'
  )
  process {
    function BinaryToHex {
        [CmdLetBinding()]
        param($bytes)
        process {
            $builder = new-object System.Text.StringBuilder
            foreach ($b in $bytes) {
              $builder = $builder.AppendFormat([System.Globalization.CultureInfo]::InvariantCulture, "{0:X2}", $b)
            }
            $builder
        }
    }
    switch ($decryptionAlgorithm) {
      "AES" { $decryptionObject = new-object System.Security.Cryptography.AesCryptoServiceProvider }
      "DES" { $decryptionObject = new-object System.Security.Cryptography.DESCryptoServiceProvider }
      "3DES" { $decryptionObject = new-object System.Security.Cryptography.TripleDESCryptoServiceProvider }
    }
    $decryptionObject.GenerateKey()
    $decryptionKey = BinaryToHex($decryptionObject.Key)
    $decryptionObject.Dispose()
    switch ($validationAlgorithm) {
      "MD5" { $validationObject = new-object System.Security.Cryptography.HMACMD5 }
      "SHA1" { $validationObject = new-object System.Security.Cryptography.HMACSHA1 }
      "HMACSHA256" { $validationObject = new-object System.Security.Cryptography.HMACSHA256 }
      "HMACSHA385" { $validationObject = new-object System.Security.Cryptography.HMACSHA384 }
      "HMACSHA512" { $validationObject = new-object System.Security.Cryptography.HMACSHA512 }
    }
    $validationKey = BinaryToHex($validationObject.Key)
    $validationObject.Dispose()
    [string]::Format([System.Globalization.CultureInfo]::InvariantCulture,
      "<machineKey decryption=`"{0}`" decryptionKey=`"{1}`" validation=`"{2}`" validationKey=`"{3}`" />",
      $decryptionAlgorithm.ToUpperInvariant(), $decryptionKey,
      $validationAlgorithm.ToUpperInvariant(), $validationKey)
  }
}

3. Tenemos una pantalla similar a la siguiente:

4. Ya estamos terminando, lo siguiente es mostrar el código, lo realizamos con la siguiente línea de comando:

Generate-MachineKey

5. Ya tenemos la línea de código, luego de presionar enter:

6. Esta linea debe ser copiada dentro del web.config antes de ser subida al servidor de aplicaciones, se debe colocar entre: <system.web> </system.web>

<configuration>
  <system.web>
    <machineKey ... />
  </system.web>
</configuration>

Por ejemplo:

Espero les haya servido…