Je dois envoyer un certificat au format PEM pour le stockage sur un module qui peut être communiqué via l'ensemble de commandes AT via une interface série sur l'un des noeuds de périphérique Linux au /dev
.Transfert d'un certificat TLS/SSL par série
Jusqu'à présent, je l'ai utilisé la plupart du temps
echo 'AT' > /dev/ttyX
à délivrer les commandes nécessaires et il a fait l'affaire très bien.
Toute sortie du périphérique est surveillée avec cat /dev/ttyX
sur une autre fenêtre de terminal.
J'ai maintenant un fichier de certificat encodé avec ANSI. La documentation me dit de l'entrer dans le module en utilisant seulement les sauts de ligne LF
et de terminer l'entrée avec Ctrl+Z
, qui je crois est hexadécimal 0x1A
. Le document spécifie également que le fichier de certificat ne peut pas se terminer par un caractère EOF
. J'ai utilisé un éditeur hexadécimal pour vérifier que le fichier est formaté comme il se doit.
J'ai essayé d'utiliser à la fois echo
et printf
pour envoyer les caractères/chaînes de certificat au module.
J'ai essayé d'inclure le caractère 0x1A tant dans le fichier et l'envoyer séparément après les caractères de certificat comme ceci:
printf '\x1a' > /dev/ttyX
ou bien
echo -n -e '\x1a' > /dev/ttyX
Le module semble reconnaître le 0x1A
car il arrête le >
-prompt pour le certificat et me donne la réponse la plus verbeuse jamais: ERROR
En général, j'envoie le contenu du fichier de certificat comme suit:
echo -e "$(cat certfile)" > /dev/ttyX
ou
printf '%b' "$(cat certfile)" > /dev/ttyX
S'il vous plaît supposer que j'ai accès à des outils de shell Linux de base (par exemple comme echo, printf, nano, stty
et ainsi de suite) avec aucune option pour installer trivialement de nouveaux. J'utilise SSH pour accéder au périphérique cible et pscp
pour transférer le fichier sur le périphérique cible. J'ai aussi une plate-forme Windows sur le côté.
Des suggestions sur quoi d'autre devrais-je prendre en considération? Peut-être une option stty
que j'ai raté? Est-ce que cat
fait quelque chose de méchant dans la phase d'entrée? Une astuce révélatrice pour enquêter sur les données de caractères sur le point d'être envoyées au module? Un truc bizarre avec des communications série que j'ai raté?
Si je
printf '%b' "$(cat cert)" > ./testoutput
et
od -x testoutput
le fichier semble bien dans l'hexagone (je réorganisés la sortie de od -x
, il semble manuellement faire des paires de chiffres hexadécimaux et les changer). Par exemple, la fin est:
2d 2d 2d 2d 2d 45 4e 44 20 43 45 52 54 49 46 49 43 41 54 45 2d 2d 2d 2d 2d 0a 1a 00
Il doit y avoir quelque chose dans stty
ou la réception qui est la cause du mal. Droite?
Oh ouais, c'est une anomalie. Quelque chose en cours de route l'ajoute. En regardant avec un éditeur hexadécimal sur le côté Windows, il ressemble '2D 2D 0A 1A'. 'Od -x' le montre même dans le fichier d'origine que j'ai transféré sur le périphérique Linux. Anomalie avec le transfert de fichier ou la sortie de «od»? o; Je ne suis pas sûr de la façon dont je devrais procéder pour le supprimer du côté Linux. – JKase
En fait, la fin est '1a 00'. Une erreur de programmation dans mon cerveau m'a empêché de changer la sortie de la dernière paire hexadécimale de 'od'. – JKase