Il s'agit d'un outil de journalisation QSO Shell-Script et basé sur le Web.
Il s'agit de fonctionnalités:
Le contrôle d'accès est fourni par le fichier de stratégie .htaccess dans le fichier registra.cgi CGI, qui écrit en fait les nouveaux enregistrements.
Le journal de bord de l'ARRL du monde (LOTW) outil canonique pour gérer les contacts est l'outil TQSL. Bien que TQSL soit open source, je n'aimais pas exactement l'idée de l'utiliser pour l'interfaçage avec mon système de journalisation - c'est un outil puissant avec plusieurs autres fonctionnalités supplémentaires (ce que je n'étais pas intéressé pour la journalisation) et je voulais quelque chose de super mince et simple - donc j'ai passé à ma propre implémentation de TQSL. Dans l'implémentation de mon TQSL, l'objectif principal est de se connecter automatiquement à LOTW tous mes contacts au moment du QSO, sans que TQSL soit installé.
Votre certificat se trouve dans un fichier .tq6 - qui est un fichier gzip'ed contenant la chaîne de fiducie du certificat, de l'AC à votre certificat (dans la clause <usercert> ) et le schéma TQSL pour les entités, les modes, etc.
[rfreire@rf rpmbuild]$ file lotw.tq6
lotw.tq6: gzip compressed data, from Unix
[rfreire@rf rpmbuild]$ gunzip -S .tq6 lotw.tq6
<?xml version="1.0" encoding="UTF-8" ?>
<tqsldata>
<tqslcerts>
<rootcert>-----BEGIN CERTIFICATE-----
[...]
En utilisant votre utilitaire TQSL, vous pouvez exporter un fichier .p12 contenant une clé de signature. Dans le certificat de signature, utilisez l'option Save the callsign certificate for <YOUR CALLSIGN> .
Tout d'abord, extraire votre certificat d'utilisateur du fichier .p12 , il s'agit du premier certificat de la chaîne et enregistrez-le sur lotw-<callsign>.cer
[rfreire@rf rpmbuild]$ openssl pkcs12 -info -in lotw.p12
Enter Import Password:
MAC Iteration 2048
MAC verified OK
PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC, Iteration 2048
Certificate bag
Bag Attributes
localKeyID: CC AC 6E 08 94 09 6E 7E B7 5B 2E 90 1A 24 2E CE 10 07 35 5D
friendlyName: TrustedQSL user certificate
subject=/1.3.6.1.4.1.12348.1.1=PY2RAF/CN=Rodrigo A B Freire/[email protected]
issuer=/C=US/ST=CT/L=Newington/O=American Radio Relay League/OU=Logbook of the World/CN=Logbook of the World Production CA/DC=arrl.org/[email protected]
-----BEGIN CERTIFICATE-----
MIIEtTCCA52gAwIBAgIDBw2TMA0GCSqGSIb3DQEBCwUAMIHYMQswCQYDVQQGEwJV
UzELMAkGA1UECAwCQ1QxEjAQBgNVBAcMCU5ld2luZ3RvbjEkMCIGA1UECgwbQW1l
[...]
Et maintenant, obtenez la clé privée pour pouvoir signer du contenu en utilisant ce certificat. Donnez-lui un mot de passe dans Enter PEM pass phrase , sinon cela échouera misérablement pleurnicher sur l'absence de mot de passe. Enregistrez-le en tant que lotw-<callsign>.key
[rfreire@rf rpmbuild]$ openssl pkcs12 -in lotw.p12 -nocerts -out lotw-<callsign>.key
Enter Import Password:
MAC verified OK
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
Maintenant, vous avez obtenu tout ce dont vous avez besoin pour signer les contacts.
Le fichier .tq8 contient en fait les contacts à télécharger sur le LOTW. Il s'agit d'un fichier compressé GZIP et avec une structure caractéristique que je partagerai ci-dessous. N'ira pas dans les détails, car les détails sont à peu près auto-décrits.
Les points forts du fichier tq8 sont:
Les coordonnées. À savoir:
[rfreire@rf rpmbuild]$ file py2raf.tq8
py2raf.tq8: gzip compressed data, was "py2raf", from Unix, last modified: Tue Dec 31 13:27:43 2019
[rfreire@rf rpmbuild]$ gunzip -S .tq8 py2raf.tq8
[rfreire@rf rpmbuild]$ cat py2raf
<TQSL_IDENT:53>TQSL V2.5.1 Lib: V2.5 Config: V11.9 AllowDupes: false
<Rec_Type:5>tCERT
<CERT_UID:1>1
<CERTIFICATE:1638>MIIEtTCCA52gAwIBAgIDBw2TMA0GCSqGSIb3DQEBCwUAMIHYMQswCQYDVQQGEwJV
UzELMAkGA1UECAwCQ1QxEjAQBgNVBAcMCU5ld2luZ3RvbjEkMCIGA1UECgwbQW1l
[...]
zQf9UWPErprv
<eor>
<Rec_Type:8>tSTATION
<STATION_UID:1>1
<CERT_UID:1>1
<CALL:6>PY2RAF
<DXCC:3>108
<GRIDSQUARE:6>GG66gm
<ITUZ:2>15
<CQZ:2>11
<eor>
<Rec_Type:8>tCONTACT
<STATION_UID:1>1
<CALL:5>PY2XX
<BAND:4>70CM
<MODE:3>FAX
<FREQ:7>439.480
<QSO_DATE:10>2019-12-31
<QSO_TIME:9>10:00:00Z
<SIGN_LOTW_V2.0:175:6>cLO9toAVzpzhDjMlMuJHAS7z6Tjpq95U0yvpd2qawz7tIrUG6jXUq9RHy4yuZd2x
kwDIkIyjv6iMevwDfFeETP0XjHQziRiUC1Ol6YnCBl3GWQAX05Y8OxEpUx0fy6Tu
8osQlV7rJ0YtvNmhPc/Fz7w79JdXqM2KVIxyUsy6tzM=
<SIGNDATA:48>11GG66GM1570CMPY2XX439.480FAX2019-12-3110:00:00Z
<eor>
Les données à signer sont définies dans l'ordre suivant, sans espaces:
Après avoir construit la chaîne pour être hachée / signée, signez-la avec votre clé. Voir l'échantillon ci-dessous:
$ echo $STRING-TO-BE-SIGNED | openssl dgst -sha1 -sign lotw-py2raf.key -passin 'pass:<password>' | base64
Pronto. Vous avez maintenant préparé le contenu signé et la dernière étape est de créer le fichier contenant tous les champs requis, de le compacter et de télécharger sur LOTW.
Voir l'échantillon ci-dessous
$ curl -F '[email protected]' https://lotw.arrl.org/lotw/upload
PROPOST désormais également le journal à SQLite. Schéma:
CREATE TABLE contacts (
serial INTEGER PRIMARY KEY,
qrg REAL,
callsign TEXT,
op TEXT,
qtr INTEGER,
mode TEXT,
power INTEGER,
propagation TEXT,
sighis INTEGER,
sigmy INTEGER,
qth TEXT,
obs TEXT );
Schéma QSL:
CREATE TABLE qsl (
callsign TEXT,
method TEXT,
date INTEGER,
via TEXT,
type TEXT,
xo BOOLEAN );
Caveat: Votre utilisateur Web doit avoir une autorisation de lecture / écriture non seulement dans le fichier SQLite, mais aussi à votre répertoire SQLite - sinon, il crachera un accès refusé.
Formulaire d'enregistrement PY2RAF
Liste PY2RAF QSO