Este é uma ferramenta de log QSO baseada na Web, baseada na Web.
Apresenta:
O controle de acesso é fornecido pelo arquivo de política .htaccess no arquivo registra.cgi cgi, que na verdade grava os novos registros.
O diário de bordo do ARRL do mundo (LOTW) Ferramenta Cannonical para lidar com contatos é a ferramenta TQSL. Embora o TQSL seja de código aberto, eu não gostava exatamente da idéia de usá -la para interface com o meu sistema de registro - é uma ferramenta poderosa com várias outras funcionalidades extras (que eu não estava interessado em registrar saquê) e queria algo super fino e direto - assim me mudei para minha própria implementação do TQSL. Na implementação do meu TQSL, o principal objetivo é fazer login automaticamente para LOTW todos os meus contatos no momento do QSO, sem ter o TQSL instalado.
Seu certificado está em um arquivo .tq6 - que é um arquivo Gzip'ed que contém a cadeia de confiança do certificado, da CA para o seu certificado (na cláusula <usercert> ) e o esquema TQSL para entidades, modos, 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-----
[...]
Ao usar o seu utilitário TQSL, você pode exportar um arquivo .p12 contendo uma chave de assinatura. No Certificado Callin, use a opção Save the callsign certificate for <YOUR CALLSIGN> .
Primeiro, extraia seu certificado de usuário do arquivo .p12 , é o primeiro certificado da cadeia e salve-o para 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
[...]
E agora, obtenha a chave privada para poder assinar conteúdo usando este certificado. Dê uma senha no Enter PEM pass phrase Etapa, caso contrário, falhará miseravelmente reclamando da falta de uma senha. Salve como 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:
Agora, você obteve tudo o que precisa para assinar os contatos.
O arquivo .tq8 realmente contém os contatos a serem enviados no LOTW. É um arquivo compactado por GZIP e com uma estrutura característica que compartilharei abaixo. Não entrará em detalhes, pois os detalhes são praticamente auto-descritos.
Os destaques do arquivo tq8 são:
As informações de contato. Nomeadamente:
[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>
Os dados a serem assinados são definidos na seguinte ordem, sem espaços:
Depois de criar a string para ser hash/assinada, assine -a com sua chave. Veja a amostra abaixo:
$ echo $STRING-TO-BE-SIGNED | openssl dgst -sha1 -sign lotw-py2raf.key -passin 'pass:<password>' | base64
Pronto. Agora você preparou o conteúdo assinado e a última etapa é criar o arquivo que contém todos os campos necessários, compacte -o e upload para o LOTW.
Veja a amostra abaixo Curl
$ curl -F '[email protected]' https://lotw.arrl.org/lotw/upload
Agora também gera log log para sqlite. Esquema:
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 );
Esquema QSL:
CREATE TABLE qsl (
callsign TEXT,
method TEXT,
date INTEGER,
via TEXT,
type TEXT,
xo BOOLEAN );
Advertência: Seu usuário da Web deve ter permissão de leitura/gravação não apenas para o arquivo SQLite, mas também para o seu diretório SQLite - caso contrário, ele vomitará um acesso negado.
Formulário de registro PY2RAF
Lista PY2RAF QSO