2016-12-27 8 views
0

リモートサーバー証明書を読み込み、ローカルディスクに保存しようとしています。これは私が使用しているPythonスクリプトです:私はそれを実行すると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

これはフォルダです。スクリプトはそれに証明書を書き込む必要があります。 – user2192774

+0

それは問題です。データをフォルダに書き込むことはできません。そのフォルダにファイルを指定する必要があります。 –

答えて

0

ファイルを指定するときにフォルダを指定しています。あなたがしようとすると、負荷データをから、またはその代わりに、ファイルのフォルダにデータを書き込む場合は、「許可を取得します

Load certificate from file.

@type file: string
@param file: Name of file containing certificate in either DER or PEM format.

documentation for the M2Crypto.X509.load_cert functionによると、あなたはファイルではなく、フォルダへのパスを指定する必要があります少なくとも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' 

を将来的には、あなたが見なければなりません適切な型の変数だけでなく、データそのものが関数の期待するものであることを保証するために使用している関数のドキュメントを参照してください。

また、あなたの質問では、ファイルに書き込もうとしていますが、ファイルから読み込む関数を使用しています。私はあなたがあなたがしていると思っていることをやっていることを確認して行くことを提案します。ここでも、使用しているライブラリのドキュメントを読むことが役立ちます。

関連する問題