小编Ami*_*itE的帖子

Python 3可执行作为Windows服务

我正在尝试在python中编写一个Windows服务,但棘手的部分是我想将它部署在没有python的机器上.我已经成功地创建了像服务这样的,如果我从我的机器上运行它的工作原理.当我尝试将其转换为exe然后尝试安装它时,问题就开始了.首先我尝试使用cx_freeze服务示例(在这里看到),setup.py看起来像这样:

from cx_Freeze import setup, Executable

options = {'build_exe': {'includes': ['ServiceHandler']}}

executables = [Executable('Config.py', base='Win32Service', targetName='gsr.exe')]

setup(name='GSR',
    version='0.1',
    description='GSR SERVICE',
    executables=executables,
    options=options
    )
Run Code Online (Sandbox Code Playgroud)

和config.py是:

NAME = 'GSR_%s'
DISPLAY_NAME = 'GSR TEST - %s'
MODULE_NAME = 'ServiceHandler'
CLASS_NAME = 'Handler'
DESCRIPTION = 'Sample service description'
AUTO_START = True
SESSION_CHANGES = False
Run Code Online (Sandbox Code Playgroud)

但是当我尝试构建它(python setup.py build)时,我收到一个错误:"cx_Freeze.freezer.ConfigError:没有名为Win32Service的基地"

其次,我尝试使用常规cx_freeze设置,exe我得到安装服务罚款,但一旦我尝试启动它我得到一个错误:"错误1053:服务没有及时响应启动或控制请求"

setup.py - python 3.3 regualr exe,安装服务,但在尝试启动时发送错误:

from cx_Freeze import setup, Executable

packages = ['win32serviceutil','win32service','win32event','servicemanager','socket','win32timezone','cx_Logging','ServiceHandler']
build_exe_options = {"packages": packages}
executable = [Executable("ServiceHandler.py")]


setup( …
Run Code Online (Sandbox Code Playgroud)

python windows service cx-freeze

11
推荐指数
2
解决办法
7072
查看次数

使用Python请求进行HTTPS TSL证书链验证

我正在使用python 2.7.9运行Windows服务.作为其中的一部分,我正在尝试使用HTTPS连接到服务器.我正在使用请求模型(2.7.0)来完成它.我也使用wincertstore(0.2)模型来读取Windows证书库并将其用作CA. 服务器证书使用中间证书按以下顺序烧录 -

Root是"Go Daddy Root Certificate Authority - G2"

中级是"Go Daddy Secure Certificate Authority - G2"

服务器证书"*.demoserver.com"

我的问题是证书验证失败,出现以下错误 - SSLError:[SSL:CERTIFICATE_VERIFY_FAILED]证书验证失败(_ssl.c:581).

这是我正在使用的代码:

import requests
import wincertstore
ca = wincertstore.CertFile()
ca.addcerts('ROOT')
ca.addcerts('CA')
requests.get('https://server.demoserver.com', verify=ca.name)
Run Code Online (Sandbox Code Playgroud)

如果我在Chrome\Firefox\IE上打开它,验证成功.我注意到以下行为:

在新操作系统上,如果我是第一次使用浏览器打开服务器,则中间证书("Go Daddy安全证书颁发机构 - G2")将被添加到Windows证书存储区,在该用户下,在中级证书颁发机构下.如果那时我将从python控制台运行上面的代码,验证将起作用,因为证书已添加到Windows应用商店.但是,由于我的代码作为服务运行,这意味着使用SYSTEM用户和本地机器商店,证书将不在那里,验证将失败.

我的问题是如何让它发挥作用?我如何告诉python检查整个链,我认为它检查服务器证书,只看到一级(中间证书),不识别它并失败,即使在系统存储中也找到了根证书.

我也试过使用certifi作为CA也失败了

python security ssl https python-requests

5
推荐指数
0
解决办法
1289
查看次数

标签 统计

python ×2

cx-freeze ×1

https ×1

python-requests ×1

security ×1

service ×1

ssl ×1

windows ×1