我正在尝试加载远程服务器证书并将其保存在我的本地磁盘中。这是我使用的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'
我的代码有什么问题?
答案 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>
此外,在您的问题中,您说您正在尝试写入文件,但您正在使用从文件中读取的函数。我建议你去做,并确保你正在做你认为你正在做的事情。再次,阅读您正在使用的库的文档将会很有帮助。