2017-07-21 2 views
0

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?

Répondre

0

Par exemple, la fin est la suivante:

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 00 1a

attendre une seconde. Qu'est-ce que c'est que ce que fait 00, juste avant le 1a?

Cela n'appartient pas. Essayez de le supprimer.

+0

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

+0

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