Skip to main content

Cloud Foxy 的 TCP/RESTful 代理 - 智能卡的云平台

项目描述

CloudFoxy - FoxyProxy

此代理使用 CloudFoxy RESTful API 连接实现简单 TCP 请求的客户端。您可以通过 GitLab 问题发送任何支持请求或在https://keychest.freshdesk.com打开支持票证

外部依赖

sudo yum install gcc libffi-devel python-devel openssl-devel

安装

安装应用程序

pip install foxyproxy

或者

pip install --upgrade --no-cache-dir foxyproxy

并创建文件夹/opt/cloudfoxy,我们可以在其中存储或相关的文件和数据

安装主管以自动重启

pip install supervisor

mkdir -p /etc/supervisord/conf.d

echo_supervisord_conf > /etc/supervisord/supervisord.conf

echo [include] >> /etc/supervisord/supervisord.conf

echo "files = conf.d/*.conf" >> /etc/supervisord/supervisord.conf

nano /etc/supervisord/supervisord.conf

找到带有inet_http_server的一行并取消注释它(部分名称),第一行类似于“port=127.0.0.1:9001”

systemctl start supervisord

systemctl enable supervisord #重启后自动重启

nano /etc/supervisord/conf.d/foryproxy.conf

并填写以下内容

[program:foxyproxy]
directory=/opt/cloudfoxy
command=foxyproxy -s http://127.0.0.1:8081 -c ica
user=root
autostart=true
autorestart=true
stderr_logfile=/var/log/foxyproxy.log
stdout_logfile=/var/log/foxyproxy.log

您可以根据需要调整参数。

重启主管:

systemctl restart supervisord

supervisorctl- 是一个客户端,显示进程的状态 - 它有如下命令:

  • 开始<名称>
  • 停止<名称>
  • 重新启动 <名称>
  • reread # 读取配置文件并显示更改
  • reload # 加载新配置以用于将来的命令

TCP接口

代理的 TCP 接口开始监听 4001 端口。可以使用命令行参数调整端口-p<port>。同样,RESTful 服务器的地址可以用-s<url:port>.

TCP 客户端可以在一段时间内发送多个命令,因为服务器保持连接打开,直到其客户端关闭它们。

每个请求至少包含 2 行:

  • 读卡器识别
  • 一个或多个命令 - 每个都在单独的行中

示例 1 - 摘要

><card reader name>"|"
><cmd ID1>:<command1>:<data>:<object>"|"
><cmd ID2>:<command2>:<data>:object"|"
<empty line>

随后对此请求作出回应:

<cmd ID1>:<response 1>
<cmd ID2>:<response 2>
@@

示例 2

>OMNIKEY AG 3121 USB|
>1:RESET|
>2:APDU|00 A4 00 0C 02 3F 00|
<empty line>

随后的回应

1:6F048400A5009000
2:9000
@@

示例 3

>*|
>1:ENUM|12
<empty line>

第一行创建用于选择一组读卡器的正则表达式,ENUM 命令的可选数字参数限制返回给客户端的终端数量。

随后的回应

1:<base64 string of terminal names separated with "|">

TCP 命令

目前为 TCP 接口实现了四个命令:

  • RESET - 重置特定的智能卡
  • EMPTYLINE - 一个帮助命令,它将使代理等待一个空的新行来完成对客户端的侦听
  • APDU - 根据 ISO7816 规范发送命令
  • ENUM - 返回具有有效签名证书的智能卡读卡器列表 - 读卡器名称采用 base64 编码,用“|”分隔
  • LIST - 返回所有智能卡读卡器的列表 - 读卡器名称采用 base64 编码,用“|”分隔
  • ALIASES - 从连接的智能卡中的证书返回名称列表,名称采用 base64 编码,因为它们可能包含 utf-8 字符;名称用“|”分隔
  • CHAIN - 返回特定别名的证书链
  • SIGN - 请求特定智能卡的签名

前三个是低级命令,要么直接发送到智能卡,要么只返回智能卡名称列表。ALIASES、CHAIN 和 SIGN 是针对特定智能卡(由 [http://ica.cz](I.CA - 一家捷克公司)出售的 eIDAS 智能卡)量身定制的抽象命令。它们展示了如何扩展 API,尽管 CloudFoxy RESTful API 还允许通过使用简单 JSON 表示法定义的协议定义抽象命令。

CloudFoxy 智能卡

CloudFoxy 可以连接通过 USB 端口连接的智能卡 - 如上面的示例所示,但我们构建它的主要原因是为 CloudFoxy 硬件平台提供一个方便的接口,该平台最多可以托管 120 个智能卡。

CloudFoxy RESTful 服务器可以连接到其中的多个,并提供对数千张智能卡的访问。

CloudFoxy 智能卡具有以下名称格式:

"CloudFoxy " | <IP address> | "@" | <id> - example "CloudFoxy 192.168.42.10@120"

这是 geeky 的丰富格式/<IP address> |"@"|<id>,例如,/192.168.42.10@120

端到端数据流示例

虽然可以在 此处找到 CloudFoxy RESTful API 的详细描述,但演示整个数据流是有意义的,它会妥协:

  1. 您的应用程序/telnet/脚本/APDUPlay(Windows PC/SC 库)
  2. 代理服务器
  3. CloudFoxy 服务器

要求

客户端-> foxyproxy

>CloudFoxy 192.168.42.10@12|
>2342:RESET|
>2343:APDU:00A4040008A00000000300000000|
<empty line>

foxyproxy -> CloudFoxy RESTful

假设 RESTful API 在http://restful.cloudfoxy.com:8081 地址运行。

http://restful.cloudfoxy.com:8081/api/v1/basic?reset=1&terminal=%2F192.168.42.10%4012

http://restful.cloudfoxy.com:8081/api/v1/basic?apdu=00A4040008A00000000300000000&terminal=%2F192.168.42.10%4012

*注意:对 RESTful API 的每个请求都必须有一个 X-Auth-Token 标头。机密在每个 CloudFoxy RESTful 服务器的配置中定义。

回复

/api/v1/basicCloudFoxy RESTful 返回对每个 GET 请求的响应,如果使用端点,这将是一个简单的文本响应。

CloudFoxy RESTful -> foxyproxy

上面有两个请求,它们可能会提供单独的响应,如下所示:

  • 回应1:6F048400A5009000
  • 回应2:9000

foxyproxy -> 客户端

TCP 代理将合并响应并将所有消息发送回客户端:

2342:6F048400A5009000
2343:9000

CloudFoxy RESTful - 其他端点

这是关于使用 CloudFoxy RESTful 的其他选项的附注。如果你使用

发布历史 发布通知| RSS订阅