2012-09-18 28 views
6

Estoy tratando de resolver los hashes de WiX RemotePayload, pero no estoy seguro de cómo se encuentra el atributo CertificatePublicKey.Cómo encontrar el hash de WiX RemotePayload hashPublicKey

Tomemos, por ejemplo, la definición .NET 4.0 Paquete de WiX 3.6 Fuentes:

<Fragment> 
    <util:RegistrySearchRef Id="NETFRAMEWORK40"/> 

    <WixVariable Id="WixMbaPrereqPackageId" Value="NetFx40Redist" /> 
    <WixVariable Id="WixMbaPrereqLicenseUrl" Value="$(var.NetFx40EulaLink)" /> 

    <PackageGroup Id="NetFx40Redist"> 
     <ExePackage 
      InstallCommand="/q /norestart /ChainingPackage &quot;[WixBundleName]&quot;" 
      RepairCommand="/q /norestart /repair /ChainingPackage &quot;[WixBundleName]&quot;" 
      UninstallCommand="/uninstall /q /norestart /ChainingPackage &quot;[WixBundleName]&quot;" 
      PerMachine="yes" 
      DetectCondition="NETFRAMEWORK40" 
      Id="NetFx40Redist" 
      Vital="yes" 
      Permanent="yes" 
      Protocol="netfx4" 
      DownloadUrl="$(var.NetFx40RedistLink)" 
      Compressed="no" 
      Name="redist\dotNetFx40_Full_x86_x64.exe"> 
     <RemotePayload 
      Size="50449456" 
      Version="4.0.30319.1" 
      ProductName="Microsoft .NET Framework 4" 
      Description="Microsoft .NET Framework 4 Setup" 
      CertificatePublicKey="672605E36DD71EC6B8325B91C5FE6971390CB6B6" 
      CertificateThumbprint="9617094A1CFB59AE7C1F7DFDB6739E4E7C40508F" 
      Hash="58DA3D74DB353AAD03588CBB5CEA8234166D8B99"/> 
     </ExePackage> 
    </PackageGroup> 
    </Fragment> 

Desde wix36-sources \ src \ ext \ NetFxExtension \ wixlib \ NetFx4.wxs

I puede encontrar el sha1 Hash con fciv -sha1 dotNetFx40_Full_x86_x64.exe ...

58da3d74db353aad03588cbb5cea8234166d8b99 dotnetfx40_full_x86_x64.exe

puedo encontrar un juego CertificateThumbprint fácilmente a través del diálogo de propiedades del archivo, o el uso de signtool que muestra la siguiente salida

C:\redist>signtool verify /v /ph dotNetFx40_Full_x86_x64.exe 

Verifying: dotNetFx40_Full_x86_x64.exe 
Signature Index: 0 (Primary Signature) 
Hash of file (sha1): 8E8582D10521962F45F33935C38A2412C4F2D4C7 

Signing Certificate Chain: 
    Issued to: Microsoft Root Authority 
    Issued by: Microsoft Root Authority 
    Expires: Thu Dec 31 03:00:00 2020 
    SHA1 hash: A43489159A520F0D93D032CCAF37E7FE20A8B419 

     Issued to: Microsoft Code Signing PCA 
     Issued by: Microsoft Root Authority 
     Expires: Sat Aug 25 03:00:00 2012 
     SHA1 hash: 3036E3B25B88A55B86FC90E6E9EAAD5081445166 

      Issued to: Microsoft Corporation 
      Issued by: Microsoft Code Signing PCA 
      Expires: Mon Mar 07 18:40:29 2011 
      SHA1 hash: 9617094A1CFB59AE7C1F7DFDB6739E4E7C40508F 

The signature is timestamped: Thu Mar 18 21:13:46 2010 
Timestamp Verified by: 
    Issued to: Microsoft Root Authority 
    Issued by: Microsoft Root Authority 
    Expires: Thu Dec 31 03:00:00 2020 
    SHA1 hash: A43489159A520F0D93D032CCAF37E7FE20A8B419 

     Issued to: Microsoft Timestamping PCA 
     Issued by: Microsoft Root Authority 
     Expires: Sun Sep 15 03:00:00 2019 
     SHA1 hash: 3EA99A60058275E0ED83B892A909449F8C33B245 

      Issued to: Microsoft Time-Stamp Service 
      Issued by: Microsoft Timestamping PCA 
      Expires: Thu Jul 25 15:11:15 2013 
      SHA1 hash: 4D6F357F0E6434DA97B1AFC540FB6FDD0E85A89F 

SignTool Error: The signing certificate is not valid for the requested usage. 
     This error sometimes means that you are using the wrong verification 
     policy. Consider using the /pa option. 

Number of files successfully Verified: 0 
Number of warnings: 0 
Number of errors: 1 

¿Qué herramienta puede proporcionar el hash para CertificatePublicKey?

editar: Sin usar calor, quiero entender de dónde vienen los hash.

edición: Soy consciente de cómo se hace esto en el código fuente de WiX y que puedo ejecutar
heat payload file -out file.wxs, pero estoy en busca de alguna herramienta externa que puede proporcionar el hash esperado (es) sin utilizar calor. Esto es realmente solo para saciar mi curiosidad.

+0

¿Dónde está el CertificadoThumbprint en el de arriba? – DaveO

+0

@DaveO es el último hash SHA1 para la cadena de certificados de firma. –

Respuesta

7

Si echa un vistazo al código fuente de la herramienta de calor, utiliza la función Microsoft.Tools.WindowsInstallerXml.Cab.Interop.NativeMethods.HashPublicKeyInfo para generar el CertificatePublicKey.

byte[] publicKeyIdentifierHash = new byte[128]; 
uint publicKeyIdentifierHashSize = (uint)publicKeyIdentifierHash.Length; 

Microsoft.Tools.WindowsInstallerXml.Cab.Interop.NativeMethods.HashPublicKeyInfo(
    certificate.Handle, 
    publicKeyIdentifierHash, 
    ref publicKeyIdentifierHashSize); 

StringBuilder sb = new StringBuilder(((int)publicKeyIdentifierHashSize + 1) * 2); 
for (int i = 0; i < publicKeyIdentifierHashSize; ++i) 
{ 
    sb.AppendFormat("{0:X2}", publicKeyIdentifierHash[i]); 
} 

this.PublicKey = sb.ToString(); 

Puede, evidentemente, utilizar este código para generar la huella digital o de acuerdo a la página wiki en Public Key fingerprints también puede utilizar la línea de comandos

ssh-keygen -lf /path/to/key.pub 

El problema es la generación de un archivo de pub ssh-keygen que cumpla con RFC4716 del certificado y aquí es donde estaba perplejo.

Personalmente, sólo tiene que utilizar el calor de línea de comandos:

heat.exe payload PATH_TO_FILE -o Output.wxs 

y no preocuparse de lo que está haciendo en realidad, ya que funciona !! :)

+0

Estoy usando 'heat' ahora, pero estoy buscando una manera de obtener' CertificatePublicKey' externamente de WiX. Además, 'ssh-keygen' ** generará ** una PublicKey, pero quiero encontrar una forma de ** leer ** PublicKey desde un ejecutable firmado por Authenticode de forma que coincida con el resultado de NativeMethods utilizado en' calor'. –

+0

He aceptado su respuesta porque ha publicado el código utilizado por WiX. Todavía no he podido encontrar otra herramienta que no sea el calor, que proporcionaría el mismo hash, y eso es lo que estaba buscando. Dado que parece que no existe una aplicación externa de este tipo, su respuesta es tan buena como puede. –

+0

'heat relief payload PATH_TO_FILE -o Output.wxs' es el hijo de oro, aquí. ¡Muchas gracias! –

1

se puede encontrar toda la información acerca de una firma en el diálogo de propiedades del archivo:

  1. En el diálogo de propiedades del archivo, haga clic en la pestaña de la firma. File properties

  2. Haga clic en los detalles, luego haga clic en 'Ver certificado'. View Certificate

  3. Las propiedades como "Clave pública" se pueden encontrar en la pestaña "Detalles". Certificate Details

  4. Si necesita un hash de esta clave pública, entonces usted puede utilizar sus herramientas de hash estándar conseguirlo mediante el uso de la 'Copiar a archivo' botón y hash ese archivo.

    Estaba incorrecto, la 'Copiar en archivo' no exporta la propiedad seleccionada, sino todo el certificado. Puede copiar y pegar este valor en un programa hash o en un editor hexadecimal para obtener el hash.

+0

Lo que ha proporcionado aquí no proporciona más detalles de los que ya he mostrado en mi pregunta. Su último paso sería obtener el hash SHA1 del archivo de certificado, no de la clave pública en sí. También he pasado por varias opciones [aquí] (http://www.openssl.org/docs/apps/x509.html) pero parece que no puedo encontrar las opciones correctas para generar '672605E36DD71EC6B8325B91C5FE6971390CB6B6', que es lo que Estoy buscando. –

+0

@JimSchubert, tienes razón. Pensé que era solo un hash de la clave pública, pero no lo es. Creo que es el hash de ['CryptHashPublicKeyInfo'] (http: //msdn.microsoft.com/en-us/library/windows/desktop/aa380204 \ (v = vs.85 \) .aspx) que incluye una ID para el tipo de clave. –

+0

Gracias. WiX es de código abierto, por lo que podría extraer el código (que caveman_dick ha publicado) y escribir una utilidad. Estoy realmente más interesado en cómo obtener este hash a través de una utilidad externa fuera de 'heat' que genera la carga útil con el hash deseado. Esto es más por curiosidad académica (y tal vez documentación para otros desarrolladores en mi equipo). –

Cuestiones relacionadas