Aller au contenu principal

Référence de l'API de signature de code à distance

Ce document s'adresse aux développeurs ayant besoin d'intégrer directement les capacités de signature à distance et décrit les deux interfaces suivantes :

  • POST /v1/codesign/sign : soumettre le résumé de hachage à signer et obtenir le résultat de signature RSA PKCS#1.
  • POST /v1/codesign/report-sign : signaler le résultat final du traitement côté client (sans incidence sur le comptage des signatures).

Adresse d'accès

EnvironnementAdresse
Environnement de production (par défaut)https://ssl.face.racent.com
Environnement NICSRShttps://ssl.face.nicsrs.com

Pour les adresses d'autres environnements, se référer à celles fournies par la livraison ou l'exploitation.


Conventions générales

Format de la requête

  • Protocole : HTTPS
  • Méthode : POST
  • Corps : JSON
  • En-têtes :
Content-Type: application/json
Accept: application/json
Authorization: Basic <base64(accessKey:accessSecret)>

Authentification

L'interface utilise l'authentification HTTP Basic :

  • Nom d'utilisateur : Access Key
  • Mot de passe : Access Secret

Générer l'en-tête d'Authorization :

printf "%s:%s" "$ACCESS_KEY" "$ACCESS_SECRET" | base64

Structure de réponse générale

{
"code": 0,
"message": "ok",
"data": {}
}
ChampTypeSignification
codeintegerCode d’état métier. 0 indique un succès, toute autre valeur que 0 indique un échec métier.
messagestringDescription de l’état métier, message d’erreur en cas d’échec.
dataobjectDonnées métier de l’interface.

L’appelant doit traiter à la fois le code d’état HTTP et le code d’état métier :

  • HTTP non 2xx → traiter comme une erreur HTTP.
  • HTTP 2xx et code != 0 → traiter comme une erreur métier.
  • HTTP 2xx et code == 0 → lire le data correspondant.

Interface de signature

Description de l’interface

POST /v1/codesign/sign

Soumettez les octets bruts du hachage à signer (encodés en Base64). Le service distant effectue une signature RSA PKCS#1 avec le certificat spécifié et renvoie le résultat.

Remarque

/v1/codesign/sign Un retour réussi du contenu signé est considéré comme une signature réussie, et le nombre de signatures est incrémenté de 1. Les requêtes échouées ne consomment pas de signature. L’appel ou non de report-sign n’affecte pas le comptage.

Paramètres de la requête

{
"code": "CERT_CODE",
"digest": "BASE64_ENCODED_HASH",
"algorithm": "SHA256",
"padding": "PKCS1",
"extra": {
"platform": "windows/amd64",
"version": "1.0.0",
"revision": "abcdef0",
"time": "2026-06-12T10:00:00+08:00",
"hostname": "build-host-01",
"signing_filename": "Example.exe",
"signing_filesize": 1048576
}
}
ChampTypeRequisSignification
codestringOuiNuméro du certificat, utilisé pour sélectionner le certificat de signature à distance.
digeststringOuiEncodage Base64 des octets bruts du hachage à signer. L’appelant doit calculer le hachage localement selon le fichier cible et les exigences de l’outil de signature.
algorithmstringOuiAlgorithme de hachage, prend en charge SHA1, SHA256, SHA384, SHA512.
paddingstringOuiMode de remplissage RSA, actuellement fixé à PKCS1.
extraobjectNonInformations de contexte du client, utilisées pour l'enregistrement des signatures, l'audit et le dépannage.

Description des champs de extra :

ChampTypeSignification
platformstringPlateforme du client, par exemple windows/amd64, linux/amd64.
versionstringVersion du client.
revisionstringRévision de la build du client.
timestringHeure de build du client ou heure de la requête.
hostnamestringNom d’hôte à l’origine de la signature.
signing_filenamestringNom ou chemin du fichier signé, il est recommandé de le masquer conformément à la politique de sécurité.
signing_filesizeintegerTaille du fichier signé (en octets).

Exemple de requête

curl -u "$ACCESS_KEY:$ACCESS_SECRET" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"code": "CERT_CODE",
"digest": "BASE64_ENCODED_HASH",
"algorithm": "SHA256",
"padding": "PKCS1",
"extra": {
"platform": "windows/amd64",
"version": "1.0.0",
"hostname": "build-host-01",
"signing_filename": "Example.exe",
"signing_filesize": 1048576
}
}' \
https://ssl.face.racent.com/v1/codesign/sign

Réponse de succès

{
"code": 0,
"message": "ok",
"data": {
"id": "735985894427246592",
"signature": "BASE64_ENCODED_SIGNATURE"
}
}
ChampTypeSignification
idstringID de l’enregistrement de signature, utilisé lors de l’appel de report-sign.
signaturestringEncodage Base64 du résultat de la signature RSA.

Rapporter le résultat de la signature

Description de l’interface

POST /v1/codesign/report-sign

Après avoir obtenu le résultat de la signature à distance, le client peut échouer lors du traitement local, de l’écriture ou de la restitution à l’appelant. Cette interface est utilisée pour renvoyer l’état final du traitement du client au serveur, afin de faciliter l’affichage de l’enregistrement de signature et le dépannage d’audit.

Remarque

Cette interface enregistre uniquement le résultat du traitement côté client et ne modifie pas le résultat du comptage de /v1/codesign/sign. Ne pas appeler cette interface n’affecte pas le nombre de signatures réussies.

Paramètres de la demande

{
"id": "735985894427246592",
"status": 1
}
ChampTypeRequisSignification
idstringOuiLe data.id renvoyé par /v1/codesign/sign.
statusintegerOuiStatut de traitement final côté client : 1 succès, 2 échec.

Exemple de demande

curl -u "$ACCESS_KEY:$ACCESS_SECRET" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"id": "735985894427246592",
"status": 1
}' \
https://ssl.face.racent.com/v1/codesign/report-sign

Réponse de succès

{
"code": 0,
"message": "ok",
"data": null
}

Exemple de réponse d’erreur

Échec d’authentification :

{
"code": 401,
"message": "unauthorized",
"data": null
}

Erreur de paramètre :

{
"code": 400,
"message": "invalid request",
"data": null
}
Remarque

Les codes d’erreur et messages d’erreur spécifiques sont ceux réellement renvoyés par le serveur. La partie intégrante ne doit pas s’appuyer sur un texte d’erreur figé pour établir des branchements métier.


Recommandations d’intégration

  • Protégez soigneusement l’Access Secret, ne l’inscrivez pas dans les journaux, les rapports d’incident ou les pages frontend.
  • digest doit être l’encodage Base64 des octets bruts du hachage, ni une chaîne hexadécimale, ni le contenu complet du fichier.
  • algorithm doit correspondre à l’algorithme de hachage effectivement utilisé par digest.
  • Le mode de remplissage actuel est fixé à PKCS1, ne transmettez aucune autre valeur.
  • Les champs digest et signature peuvent être longs ; il est recommandé de ne journaliser que la longueur ou un résultat masqué du préfixe/suffixe.
  • Il est recommandé d’appeler report-sign pour signaler le résultat une fois le traitement final côté client terminé, afin de faciliter les audits et le dépannage ultérieurs.
  • Traitez séparément les erreurs réseau, les erreurs HTTP et les erreurs métier, et définissez un délai d’expiration et une stratégie de nouvelle tentative raisonnables pour les requêtes signées.