Lorsqu'un MOD Minecraft est chargé, un message indiquant que le fichier JAR du MOD n'est pas signé peut être affiché dans le journal. Même s'il n'est pas signé, cela n'affecte pas le fonctionnement de MOD, mais pour ceux qui veulent supprimer le journal des messages, je décrirai la procédure de signature.
Vous aurez besoin d'un certificat pour signer.
Vous pouvez le générer avec OpenSSL ou Windows SDK makecert.exe
, ou demander à une autorité de certification d'émettre un certificat de signature de code, mais le fichier au format PKCS12 obtenu de cette manière est Oui, si vous connaissez la valeur de l'empreinte digitale, passez à la description dans le code source MOD. Si vous n'êtes pas sûr, passez à Confirmer l'empreinte digitale.
Cette section décrit la procédure de création d'un certificat à l'aide des outils JDK. C'est un soi-disant «certificat Oreore» qui n'est pas émis par l'autorité de certification, mais il semble qu'il n'y ait pas de problème pour Minecraft Forge.
python
$ keytool -genkeypair -storetype pkcs12 -keystore <FILENAME>.p12 -alias <FRIENDLYNAME> -keyalg ec -keysize 384 -validity 3650
-- -storetype
est le format de fichier de certificat
Spécifiez pkcs12
pour sortir dans PKCS12, qui est un format plus général.
Si rien n'est spécifié, il sera au format JKS, mais un avertissement sera émis après la génération de la clé.
Assurez-vous également de le définir ici sur pkcs12
car il devra être traité par OpenSSL plus tard.
---keystore
spécifie le nom du fichier dans lequel le certificat créé sera enregistré
---alias
est le nom de base du fichier de signature ajouté au fichier JAR
Au format PKCS12, il est représenté sous la forme d'un nom convivial.
---keyalg
est un algorithme de signature
Vous pouvez spécifier rsa
ou ʻec. --
-keysize est la longueur de la clé La valeur qui peut être spécifiée dépend de l'algorithme. Dans le cas de "-keyalg rsa", ce sera un multiplicateur de 2 tel que "2048" ou "4096". Dans le cas de «-keyalg ec», ce sera soit «256», «384» ou «521». --
validité` est le nombre de jours d'expiration calculé à partir de la date de création
Pendant 10 ans, ce sera «3650».
Lorsque vous exécutez la commande, vous serez d'abord invité à entrer un mot de passe. Si vous souhaitez utiliser la tâche build.gradle pour signer, c'est une bonne idée d'utiliser une chaîne sur laquelle vous pouvez vous engager. Dans ce cas, le fichier de certificat ne doit jamais être publié.
Ensuite, définissez le nom commun du certificat, qui se compose de plusieurs champs. J'expliquerai dans l'ordre dans lequel ils sont affichés.
mcmod
.Lorsque vous avez fini d'entrer le code du pays, il vous sera demandé «[Non]:». C'est une question qui n'a pas de sens, mais entrez simplement «y». Sinon, vous devrez recommencer.
On vous demandera le mot de passe à la fin, mais s'il est le même que le premier mot de passe, appuyez simplement sur la touche Entrée.
Lors de l'utilisation du «keytool» mentionné ci-dessus, le nom convivial est inclus comme chaîne de caractères spécifiée par «-alias», mais lorsqu'il est émis par l'autorité de certification ou généré par OpenSSL, le nom convivial n'est pas défini. Il y a. Cette procédure peut également être appliquée pour modifier les mots de passe au format PKCS12.
Exécutez la commande suivante et ce n'est pas grave si vous avez un friendlyName sous Attributs de sac.
python
$ openssl pkcs12 -in <FILENAME>.p12 -info -nokeys
Si le nom convivial n'est pas défini, ajoutez-le.
① Sauvegarde
python
$ mv <FILENAME>.p12 <FILENAME>.p12.bak
② Retirez le certificat et la clé de PKCS12
python
$ openssl pkcs12 -in <FILENAME>.p12.bak -info -nodes -out <FILENAME>.txt
③ Générez PKCS12 tout en définissant un nom convivial à partir du certificat et de la clé extraits
python
$ openssl pkcs12 -export -in <FILENAME>.txt -name <FRIENDLYNAME> -out <FILENAME>.p12
Veuillez noter que le mot de passe doit comporter au moins 6 caractères. Ceci est une spécification de jarsigner
, et un mot de passe qui ne répond pas à cela entraînera une erreur.
④ Nettoyer
python
$ rm <FILENAME>.txt
Si vous souhaitez publier un fichier JAR signé d'un MOD Minecraft, vous aurez besoin de la valeur de l'empreinte digitale. Une empreinte digitale est une valeur obtenue en traitant un certificat en données binaires (format ASN-1) avec une fonction de hachage. Étant donné que la même valeur d'empreinte digitale peut être obtenue à partir du même certificat, la valeur examinée ici peut être utilisée tant qu'elle n'est pas recréée en raison de l'expiration. Minecraft Forge nécessite des valeurs d'empreintes digitales dans l'algorithme de hachage SHA-1.
python
$ openssl pkcs12 -in <FILENAME>.p12 -info -nokeys|openssl x509 -fingerprint -noout
Lors de l'exécution, après avoir entré le mot de passe, la valeur de l'empreinte digitale sera sortie en notation hexadécimale séparée par ":".
Après avoir supprimé le ":" de cette notation et l'avoir connecté, réécrivez les majuscules en minuscules. C'est la valeur de l'empreinte digitale décrite dans le MOD.
Ajoutez certificateFingerprint
à l'annotation @ Mod
, puis écrivez la valeur de l'empreinte digitale sous forme de chaîne.
HogeMod.java
@Mod(modid = "hogemod",
/*... Omis ...*/
certificateFingerprint = "Valeur d'empreinte digitale")
public class HogeMod {
/*... Omis ...*/
}
Certains ne sont pas obligatoires, mais sont appelés lorsque les gestionnaires d'événements de Forge ne correspondent pas à leurs signatures.
Comme pour FMLPreInitializationEvent
et FMLInitializationEvent
, déclarez une méthode avec un argument de FMLFingerprintViolationEvent
à l'aide de l'annotation @ Mod.EventHandler
.
HogeMod.java
@Mod.EventHandler
public void badSignature(FMLFingerprintViolationEvent event)
{
System.err.println("Les signatures ne correspondent pas!Pas le fichier de distribution d'origine!");
}
Une fois la description terminée, générez un fichier JAR avec gradle.
Il y a deux façons de faire le processus de signature, l'une consiste à exécuter la commande et l'autre à le faire avec gradle.
python
$ jarsigner -sigalg SHA256withECDSA -digestalg SHA-256 -tsa http://timestamp.digicert.com -keystore <FILENAME>.p12 <JARFILE> <FRIENDLYNAME>
---sigalg
est un algorithme de signature
Lorsque vous utilisez le DSA à courbe elliptique, utilisez SHA256withECDSA
.
---digestalg
est un algorithme de hachage
Spécifiez le même hachage que -sigalg
. Dans ce cas, ce sera «SHA-256».
---tsa
est l'URL du serveur d'horodatage
Vous pouvez signer sans lui, mais la signature sera invalide lorsque le certificat expirera.
Il existe différents types de serveurs d'horodatage.
C'est le serveur qui renvoie la signature d'horodatage avec SHA-256.
http://sha256timestamp.ws.symantec.com/sha256/timestamp
L'algorithme utilisé pour la signature et le hachage, mais peut être tout ce que Java prend en charge.
https://docs.oracle.com/javase/jp/9/docs/specs/security/standard-names.html
Vous pouvez sélectionner -sigalg
dans l'algorithme Signature ici et -digestalg
dans l'algorithme Message Digest ici.
Il vous sera demandé un mot de passe, alors spécifiez le mot de passe correct pour terminer la signature.
Ajoutez le code suivant à la fin de build.gradle
.
Chaque argument passé à ʻant.signjarest le même que
jarsigner` dans la section précédente.
build.gradle
task signJar<<{
ant.signjar(
jar:jar.archivePath,
alias:"<FRIENDLYNAME>",
keystore:"<FILENAME>.p12",
storepass:"<PASSWORD>",
sigalg:"SHA256withECDSA",
digestalg:"SHA-256",
tsaurl:"http://timestamp.digicert.com"
)
}
signJar.dependsOn reobfJar
assemble.dependsOn signJar
Lorsque vous exécutez une compilation en utilisant ce build.gradle
, un fichier JAR signé sera généré.
Placez le fichier JAR signé généré dans le dossier mods et lancez Minecraft avec Forge installé.
Lorsque vous atteignez l'écran titre, ouvrez logs \ debug.log
, qui se trouve dans la même hiérarchie que ʻoptions.txt`.
Si la signature est reconnue avec succès, une telle formulation apparaîtra.
debug.log
[HH:MM:SS] [main/DEBUG] [FML]: Mod signature data
[HH:MM:SS] [main/DEBUG] [FML]: Valid Signatures:
... Omis ...
[HH:MM:SS] [main/DEBUG] [FML]: (Valeur d'empreinte digitale) <MOD ID> (<Nom du MOD> <Version MOD>) <Nom de fichier JAR>
... Omis ...
Recommended Posts