Python请求';拒绝许可';但与sudo合作

Python请求';拒绝许可';但与sudo合作,python,linux,ubuntu,ssl,python-requests,Python,Linux,Ubuntu,Ssl,Python Requests,我正在使用Python请求库连接到REST服务器,方法是使用.pem证书来验证我是谁来建立连接,这样我就可以开始收集数据、解析数据等。当我通过Eclipse或终端运行程序时,我遇到以下错误: [('system library', 'fopen', 'Permission denied'), ('BIO routines', 'FILE_CTRL', 'system lib'), ('SSL routines', 'SSL_CTX_use_certificate_file', 'system l

我正在使用Python请求库连接到REST服务器,方法是使用.pem证书来验证我是谁来建立连接,这样我就可以开始收集数据、解析数据等。当我通过Eclipse或终端运行程序时,我遇到以下错误:

[('system library', 'fopen', 'Permission denied'), ('BIO routines', 'FILE_CTRL', 'system lib'), ('SSL routines', 'SSL_CTX_use_certificate_file', 'system lib')]
但是,如果我以“sudo”的身份运行,请求库将按预期工作,并且我能够检索数据。不幸的是,作为“sudo”运行会产生副作用,默认的Python解释器是根解释器,即Python2。然而,Anaconda需要很多库依赖项

对于上下文,以下是我用于建立连接的函数:

PEM_FILE = os.path.expanduser("path/to/pem/file.pem")   #Path is to a folder in root level
    def set_up_connection(self):

    #URL's to request a connection with
    rest_auth = 'https://www.restwebsite.com/get/data'

    ip_address = self.get_ip_address()

    body = json.dumps({'userid':'user', 'password':'pass', 'ip_address':ip_address})

    try:
        resp = self.session.post(rest_auth, data=body, cert=PEM_FILE, verify=False)
        values = resp.json()
        token = values['token']

    except Exception as e:
        print(e)
        token = None

    return token, ip_address
TLDR;使用“python rest_connector.py”会呈现一个错误。像sudo那样运行该命令

证书的上下文:.pem证书权限设置为600(rw-------)

为了尝试解决以sudo方式运行的问题,我启动了一个终端并运行“sudo-Es”,它将终端设置为以root方式运行,并使用Anaconda作为默认解释器,但最终出现了一个握手错误:

[('SSL routines', 'ssl3_read_bytes', 'tlsv1 alert unknown ca'), ('SSL routines', 'ssl3_read_bytes', 'ssl handshake failure')]
如果有人能帮我解决这个问题,这将是一个很好的临时解决方案,但我仍然需要能够在没有sudo的情况下运行它


提前谢谢。

用户名需要能够读取文件。您可以通过运行
ls path_to_file.pem
进行验证

如果更改了文件的所有权,则可能仍然缺少对包含该文件的目录的可执行权限


您可以使用
chmod-R+x~/path/to\u directory\u包含\u perm

用户名需要能够读取文件。您可以通过运行
ls path_to_file.pem
进行验证

如果更改了文件的所有权,则可能仍然缺少对包含该文件的目录的可执行权限


您可以使用
chmod-R+x~/path/to\u directory\u包含\u perm

来解决这个问题,所以我设法解决了这个问题,我将发布我所做的,以防其他人遇到类似问题

证书和pem文件的权限设置为600,所有权设置为root,执行openssl哈希功能,唯一的问题是证书在子目录中的位置

当我将证书放入“etc/pki/tls/certs”中时,它们实际上属于“etc/ssl/certs”。对于.pem文件也是如此,只是.pem会被放在一个受限制的文件夹“private”中。将文件移动到正确的文件夹后。然后,我能够将请求的verify参数设置为cert_路径,一切都按照我所需要的方式进行

resp = self.session.post(rest_auth, data=body, cert=PEM_FILE, verify=cert_path)
“etc/pki/tls/certs”是Linux Fedora发行版的目录etc/ssl/certs'是Linux Ubuntu发行版的目录


我希望这对某人有帮助

好的,所以我设法解决了这个问题,我将发布我所做的,以防其他人遇到类似的问题

证书和pem文件的权限设置为600,所有权设置为root,执行openssl哈希功能,唯一的问题是证书在子目录中的位置

当我将证书放入“etc/pki/tls/certs”中时,它们实际上属于“etc/ssl/certs”。对于.pem文件也是如此,只是.pem会被放在一个受限制的文件夹“private”中。将文件移动到正确的文件夹后。然后,我能够将请求的verify参数设置为cert_路径,一切都按照我所需要的方式进行

resp = self.session.post(rest_auth, data=body, cert=PEM_FILE, verify=cert_path)
“etc/pki/tls/certs”是Linux Fedora发行版的目录etc/ssl/certs'是Linux Ubuntu发行版的目录


我希望这对某人有帮助

谁拥有.pem文件?能否将文件的所有者
~/path/更改为/pem/file.pem
为运行脚本的be用户?Root拥有该文件。我只是尝试使用“sudo chown username file.pem”将所有者更改为我自己。仍然收到握手错误。请尝试chmod 400~/path/to/pem/file。pem@DmgCtrl-b、 net:作为脚本的用户执行
cat path/to/pem/file.pem
。如果由于缺少权限而失败,则文件本身不可读,或者上面的任何目录都不可执行。这意味着仅对文件进行权限或所有权更改可能不够,但必须对文件所在的目录进行更改,此目录所在的目录等。谁拥有.pem文件?能否将文件的所有者
~/path/to/pem/file.pem
更改为运行脚本的be用户?Root拥有该文件。我只是尝试使用“sudo chown username file.pem”将所有者更改为我自己。仍然收到握手错误。请尝试chmod 400~/path/to/pem/file。pem@DmgCtrl-b、 net:作为脚本的用户执行
cat path/to/pem/file.pem
。如果由于缺少权限而失败,则文件本身不可读,或者上面的任何目录都不可执行。这意味着仅对文件进行权限或所有权更改可能不够,但您必须对文件所在的目录、该目录所在的目录等进行更改。我使用该命令更改了文件的权限,但运气不好。仍然收到握手错误。因此,在更改权限后,异常现在有所不同。很抱歉,我昨晚没有注意到这一点,但在我以“sudo-Es”的身份运行之后,现在看起来像是一个异常:
[('SSL例程','ssl3_读取字节','tlsv1警报未知ca'),('SSL例程','ssl3_读取字节','SSL握手失败')]
我使用该命令更改了文件的权限,但运气不佳。仍然收到握手错误。因此,在更改权限后,异常现在有所不同。抱歉,我昨晚没有注意到这一点,但在我以“sudo-Es”的身份运行之后,现在看起来像是异常:
[('SSL例程','ssl3_读取字节','tlsv1警报未知ca'),('SSL例程','SSL