云foxy的tcp/restful代理-智能卡的云平台

foxyprox的Python项目详细描述


云狐-Foxyproxy

此代理将实现简单TCP请求的客户端与CloudFoxy连接起来 restful api。您可以通过gitlab问题发送任何支持请求,或者打开 支持票 https://keychist.freshdesk.com

外部依赖性

sudo yum安装gcc libffi devel python devel openssl devel

安装

安装应用程序

pip安装foxyproxy

pip install--upgrade--no cache dir foxyproxy

并创建文件夹/opt/cloudfoxy,以便存储或相关文件和数据

为自动重新启动安装管理器

PIP安装主管

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

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

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

TCP接口

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

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

每个请求至少包含2行:

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

示例1-Abstrakt

><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接口:

  • 重置-重置特定智能卡
  • emptyLine—一个助手命令,它将使代理等待一个空的新行完成对客户端的侦听
  • APDU-根据ISO7816规范发送命令
  • 枚举-返回具有有效签名证书的智能卡读卡器列表-读卡器的名称为base64 编码,用""分隔
  • list-返回所有智能卡读卡器的列表-读卡器的名称以base64编码,用""分隔
  • 别名-返回已连接智能卡中证书的名称列表, 名称是base64编码的 包含UTF-8字符;名称用""分隔
  • chain-返回特定别名的证书链
  • 签名-请求特定智能卡的签名

前三个很低-级别命令,直接发送到智能卡,或 只需返回智能卡名称列表。别名、链和 符号是为特定智能卡定制的抽象命令-EIDAS智能卡 由[http://i ca.cz]出售(i.ca-一家捷克公司)。它们展示了api是如何实现的 扩展的,尽管cloudfoxy restful api也允许定义抽象的 通过协议的命令用简单的json符号定义。

CloudFoxy智能卡

CloudFoxy可以连接通过USB端口连接的智能卡,如 上面的例子,但是我们建造它的主要原因是为了 与CloudFoxy硬件平台的接口,该平台最多可承载120个智能卡。

cloudfoxy restful服务器可以连接到其中的多个服务器并提供访问 成千上万的智能卡。

CloudFoxy智能卡的名称格式如下:

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

这是极客/<;IP address>;"@"<;ID>;的丰富格式,例如/192.168.42.10@120

端到端数据流示例

虽然可以找到cloudfoxy restful api的详细描述 在这里,演示 整个数据流,其中包括:

  1. 您的应用程序/telnet/script/apduplay(Windows PC/SC库)
  2. 狐假虎威
  3. CloudFoxy服务器
  4. < > >

    请求

    客户机->;foxyproxy

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

    狐狸精->;云狐静谧

    假设restful api在http://restful.cloudfoxy.com:8081 rel="nofollow">http://restful.cloudfoxy.com:8081上运行 地址:

    http://restful.cloudfoxy.com:8081/api/v1/basic?复位=1&;端子=%2F192.168.42.10%4012

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

    *注意:对restful api的每个请求都必须有一个x-auth-token头。秘密 在每个cloudfoxy restful服务器的配置中定义。

    响应

    cloudfoxy restful返回对每个get请求的响应,它将 如果使用了/api/v1/basic端点,则是一个简单的文本响应。

    云狐静谧->;狐猴

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

    • 响应1:6f0484005009000
    • 响应2:9000

    FoxyProxy->;客户机

    TCP代理将组合响应并将"一体式"消息发送回客户端:

    [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
    
    0

    cloudfoxy restful-其他端点

    这是关于使用cloudfoxy restful的其他选项的附带说明。如果您使用

    欢迎加入QQ群-->: 979659372 Python中文网_新手群

    推荐PyPI第三方库


热门话题
java字符串数组未显示预期值   在NetBeans 7.3.1中为JAVA创建JAR文件时出错   使用java导出oracle并获取状态   java如何在另一个项目中导入包含AspectJ方面和注释的项目   IE8/JRE1中的java JApplet。6.0_24 getAppletContext()和JSObject上的NullPointerException。getWindow()   java在Android项目中创建一个类   regex如何在数学运算符上拆分字符串作为分隔符,但在引号中转义运算符(在java中)?   java if语句应该返回“IllegalArgumentException”,但它返回一个空字符串   java最短路径与Dijkstra算法   java在数组中查找最近的数字   使用与ThreadSafe集合同步的java?   java NetBeans安装   stream Java=下载缓冲区未满?冲洗/缓冲是如何工作的?