无法使用python将证书保存到本地磁盘

时间:2016-12-27 21:29:41

标签: python sockets x509certificate

我正在尝试加载远程服务器证书并将其保存在我的本地磁盘中。这是我使用的python脚本:

from M2Crypto.X509 import FORMAT_PEM

import StringIO
import traceback
from M2Crypto.Err import SSLError
import ssl
import socket
import pprint
import M2Crypto
from M2Crypto import X509, RSA
from datetime import datetime

context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)  
context.verify_mode = ssl.CERT_NONE
context.check_hostname = False
context.verify_mode = ssl.CERT_NONE
port = 443
host='216.58.212.67' #google

#creating ssl socket
ssock = context.wrap_socket(socket.socket(socket.AF_INET), server_hostname=host)

#ssl connection
try:
    ssock.connect((host, port))
except socket.error: #if tls connection is not possible
    print "Faile connection with: " + host

#get the certificate
cert = ssock.getpeercert(True)
x509 = M2Crypto.X509.load_cert_der_string(cert)
x509_file= M2Crypto.X509.load_cert('C:/Users/xxx/Documents/temp',format=FORMAT_PEM)

当我运行它时,我收到此错误:

Traceback (most recent call last):
  File "C:/Users/ealas/PycharmProjects/tlsScan/test.py", line 36, in <module>
    x509_file= M2Crypto.X509.load_cert('C:/Users/xxx/Documents/temp',format=FORMAT_PEM)
  File "C:\Python27\lib\site-packages\M2Crypto\X509.py", line 609, in load_cert
    bio = BIO.openfile(file)
  File "C:\Python27\lib\site-packages\M2Crypto\BIO.py", line 186, in openfile
    return File(open(filename, mode))
IOError: [Errno 13] Permission denied: 'C:/Users/xxx/Documents/temp'

我的代码有什么问题?

1 个答案:

答案 0 :(得分:0)

您应该在指定文件时指定文件夹。根据{{​​3}},您应该指定文件的路径,而不是文件夹:

  

从文件加载证书。

     

@type file:string
  @param文件:包含DER或PEM格式证书的文件名。

如果您尝试从文件夹而不是文件加载数据或将数据写入文件夹,则至少在Windows上会出现“权限被拒绝”错误。为了测试这个,我创建了一个名为temp的文件夹,并尝试从中读取数据并将数据写入其中,我得到了与您的问题完全相同的错误:

Traceback (most recent call last):
  File "test.py", line 4, in <module>
    with open(r'C:\Users\Random\Documents\temp', 'w') as f:
IOError: [Errno 13] Permission denied: 'C:\\Users\\Random\\Documents\\temp'

Traceback (most recent call last):
  File "test.py", line 4, in <module>
    with open(r'C:\Users\Random\Documents\temp', 'r') as f:
IOError: [Errno 13] Permission denied: 'C:\\Users\\Random\\Documents\\temp'

将来,您应该查看您正在使用的函数的文档,以确保您不仅传递正确类型的变量,而且数据本身也是函数所期望的。< / p>

此外,在您的问题中,您说您正在尝试写入文件,但您正在使用从文件中读取的函数。我建议你去做,并确保你正在做你认为你正在做的事情。再次,阅读您正在使用的库的文档将会很有帮助。