Comment enregistrez-vous un certificate sha256 avec une signature sha256 pour sécuriser le code Excel VBA Macro dans Excel 2013?

Cette citation a été prise d'une réponse à une autre question sur les parameters de security Excel. La réponse proposée en utilisant un certificate numérique pour signer des macros pour résoudre le problème de security. Vers la fin de la réponse, il a été noté que: "Lorsque vous signez numériquement des macros, il est important d'get un horodatage."

Ceci est délicat dans Office 2013, pour diverses raisons. Tout d'abord, il existe deux façons différentes de joindre une signature à une feuille de calcul. Ils sont connus comme des signatures visibles et invisibles. Les signatures visibles peuvent être appliquées à l'set du document à l'aide du Fichier> Proteger le classur> Ajouter une signature numérique. Pour appliquer un code invisible uniquement au code VBA, à partir de l'éditeur VBA, utilisez les commands devises> Signature numérique, puis choisissez un certificate pour signer.

Il serait préférable de protéger simplement le code VBA et non la tableur complète, car dès que vous exécutez la macro, le code écrit sa sortie dans la feuille de calcul, et comme c'est un classur protégé, le code s'arrête et s'arrête . Ce classur a été conçu comme une démonstration et a été enregistré avec une seule recommandation et nécessite un mot de passe pour le modifier. Nous voulons que l'user puisse avoir la macro d'écriture dans la feuille de calcul, mais pas pour save le file avec des modifications sous le même nom. Puisque l'application d'une signature numérique au VBA ne protège que le VBA, lorsqu'il écrit sur la feuille de calcul, il n'y a pas d'erreur.

Le problème est d'get un horodatage sur le certificate protégeant le VBA.

Il existe une gamme déconcertante de parameters de stratégie de registre et de groupe qui affectent l'horodatage, et il n'est pas clair quels parameters sont nécessaires pour get un timestamp sha256 sur mon certificate sha256 lorsqu'il est utilisé pour protéger uniquement le VBA. J'ai essayé tout ce qui semble avoir marqué l'horodatage sans joie.

Bien que j'ai pu signer des feuilles de calcul et get cette signature horodatée à l'aide de la nouvelle signature de countur Office XAdES, le certificate utilisé pour signer le projet VBA n'est pas marqué par l'horodatage lui-même.

Les inputs sont la key de registre suivante: HKCU \ Software \ Microsoft \ Office \ 15.0 \ Common \ Signatures

Je crois que les valeurs suivantes dans la key ne touchent que l'horodatage de la signature entière XAdES du classur.

MinXAdESLevel DWORD 2 TSALocation http://timestamp.comodoca.com/rfc3161 XAdESLevel DWORD 5

À partir de l'expérimentation, j'ai constaté qu'il était possible d'get le cert protégeant le VBA signé avec un horodatage en utilisant les inputs de registre suivantes:

HKCU \ Software \ Microsoft \ VBA \ Security: TimeStampURL http://timestamp.comodoca.com/rfc3161 TimeStampRetryCount DWORD 2 TimeStampRetryDelay DWORD 5

Malheureusement, je n'ai pu get un horodatage SHA1 que pour le faire de cette façon. Bientôt, ce sera comme n'ayant aucun horodatage sur Windows 10.

Est-ce que quelqu'un sait comment get un timestamp SHA256 dans cette situation?

Par défaut, Office n'utilise pas de service d'horodatage lors de la signature ou de la validation du code. L'utilisation d'un service d'horodatage prend habituellement plus de time que le process de signature numérique par défaut. Pour utiliser un service d'horodatage, Office doit communiquer avec le server de timestamp d'une autorité de certificateion sur Internet pour compléter l'action. Vous ne pouvez pas afficher une signature numérique à l'heure, sauf si vous êtes connecté à Internet.

Il n'y a pas d'interface user Office embeddede pour utiliser cette option. Pour que Office utilise un service d'horodatage avec toutes les futures signatures numériques, vous devez définir ces keys de registre. Les valeurs doivent être inputs sous la touche ONE. Veuillez utiliser les instructions suivantes:

Créez une key de security au niveau VBA: HKEY_CURRENT_USER \ Software \ Microsoft \ VBA \ Security Ajoutez une valeur de string Item à la key de security nommée TimeStampURL avec la valeur définie sur l'URL de l'horodatage ci-dessous.

L'URL de l'horodatage SHA-1 est timestamp.verisign.com/scripts/timstamp.dll Le nom de file timstamp.dll est requirejs pour se conformer à une ancienne convention de dénomination MS-DOS).

L'URL de l'horodatage SHA-1 avec RFC 3161 est http://sha1timestamp.ws.symantec.com/sha1/timestamp

L'URL de l'horodatage SHA-256 avec RFC 3161 est http://sha256timestamp.ws.symantec.com/sha256/timestamp

Ajoutez un élément de valeur DWORD à la key de security nommée TimeStampRetryCount avec la donnée de valeurs définie sur '3' (Dans mon cas, j'ai utilisé 3, mais vous pouvez choisir un nombre différent) Ajoutez un élément de valeur DWORD à la key de security nommée TimeStampRetryDelay avec datatables de valeur réglé sur '3' (dans mon cas, j'ai utilisé 3, mais vous pouvez choisir un numéro différent). Pour réduire la probabilité qu'un user malveillant puisse dériver la key privée d'un certificate numérique à partir de sa key publique, un certificate numérique obtenu sur le marché expire après un an. Office ne vous permettra pas d'utiliser un certificate expiré pour signer des macros et avertira également l'user final lorsqu'une signature numérique pour un file a expiré. L'user final verra un avertissement dans l'avertissement habituel de security de la signature numérique, ce qui indique que le certificate n'est plus digne de confiance. L'user peut déterminer si le certificate a expiré en consultant la boîte de dialog Détails du certificate.

Pour éviter de devoir démissionner de votre logiciel et Visual Basic pour les projets d'applications chaque fois que votre certificate expire, certaines autorités de certificateion commerciales fournissent un service d'horodatage. Si vous utilisez un service d'horodatage lors de la signature du code, un hachage de votre code est envoyé à un server pour save un horodatage pour votre code. Lors de l'utilisation d'un service d'horodatage, le logiciel d'un user peut distinguer entre le code signé avec un certificate expiré qui ne doit pas être approuvé et le code qui a été signé avec un certificate valide au moment où le code a été signé, mais qui a expiré.