这是一个基于网络的shell-scrom,基于网络的QSO记录工具。
它的特征:
访问控件由.htaccess策略文件提供给registra.cgi CGI文件,该文件实际上写了新的记录。
TQSL工具是ARRL的世界日志(LOTW)炮制工具。虽然TQSL是开源的,但我并不完全喜欢将其用于与我的记录系统接口的想法 - 它是一种功能强大的工具,具有其他几个额外的功能(我对Logging Ligging Ligging Ligging不感兴趣),我想要Super Slim nighterforward的东西 - 因此,我搬到了我自己的TQSL实现。在我的TQSL的实现中,主要目标是在QSO时自动登录所有联系人,而不会安装TQSL。
您的证书位于.tq6文件中 - 这是一个包含证书信任链的GZIP'ED文件,从CA到您的证书(在<usercert>条款中)和实体,模式,模式等的TQSL架构。
[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-----
[...]
通过使用您的TQSL实用程序,您可以导出包含签名键的.p12文件。在呼叫证书中,使用该选项Save the callsign certificate for <YOUR CALLSIGN> 。
首先,从.p12文件中提取用户证书,它是链中的第一个证书,并将其保存到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
[...]
现在,获取私钥,可以使用此证书签署内容。在Enter PEM pass phrase步骤中给它一个密码,否则,它将失败,因为缺少密码而失败。将其保存为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:
现在,您已经获得了签署联系人所需的一切。
.tq8文件实际上包含要上传到LOTW的联系人。它是一个被GZIP压缩的文件,具有特征性结构,我将在下面分享。不会详细介绍,因为细节几乎是自称的。
tq8文件的亮点是:
联系信息。即:
[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>
要签名的数据按以下顺序定义,没有空间:
构建要进行哈希/签名的字符串后,然后用钥匙签名。请参阅以下样本:
$ echo $STRING-TO-BE-SIGNED | openssl dgst -sha1 -sign lotw-py2raf.key -passin 'pass:<password>' | base64
普朗托。现在,您已经准备好签名的内容,最后一步是构建包含所有必需字段的文件,紧凑并上传到LotW。
请参阅以下样品卷曲
$ curl -F '[email protected]' https://lotw.arrl.org/lotw/upload
现在,也将日志输出到sqlite。模式:
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 );
QSL模式:
CREATE TABLE qsl (
callsign TEXT,
method TEXT,
date INTEGER,
via TEXT,
type TEXT,
xo BOOLEAN );
警告:您的Web用户不仅必须对SQLite文件进行读取/写入权限,而且还必须对您的SQLite目录也有读取的权限 - 否则,它将拒绝访问权限。
PY2RAF记录表格
PY2RAF QSO列表