2017-09-05 19 views
0

Python Requestsライブラリを使用してRESTサーバーに接続し、.pem証明書を使用して接続を確立するユーザーを認証し、データの収集、解析などを開始できます。 。私はEclipseや端子を介して私のプログラムを実行すると、私はこのエラーを取得:Python Requests 'Permission denied'しかしsudoで動作します。

[('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 certの権限は600(rw -------)に設定されています。

私の問題をsudoとして実行しようとすると、ターミナルを起動し、ターミナルをルートとして実行するように設定したsudo -Eを実行し、デフォルトのインタープリタとしてAnacondaを使用しますが、ハンドシェークエラー:誰かが私はそれをこのように解決するのに役立つことができれば

[('SSL routines', 'ssl3_read_bytes', 'tlsv1 alert unknown ca'), ('SSL routines', 'ssl3_read_bytes', 'ssl handshake failure')] 

は、それは素敵な一時的な修正だろうが、私はまだ、これはsudoをせずに実行できるようにする必要があります。

ありがとうございます。

+1

誰が.pemファイルを所有していますか? – fhossfel

+0

'〜/ path/to/pem/file.pem'ファイルの所有者を、そのスクリプトを実行するユーザーに変更できますか? – davejagoda

+0

ルートがファイルを所有していました。私はちょうど 'sudo chown username file.pem'を使って所有者を自分自身に変更しようとしました。まだハンドシェイクエラーが発生しています。 –

答えて

0

[OK]をクリックしていることを修正することができますので、私はこの問題を解決するために管理し、私は同様の問題で、この時にケースの他の誰つまずくでやったことを投稿します。

権限がcertsファイルとpemファイルに対して600に設定され、所有権がrootに設定され、opensslハッシュ関数が実行された場合、唯一の問題はcertsがサブディレクトリに配置された場所でした。

私はcertsを 'etc/pki/tls/certs'に入れていましたが、実際には 'etc/ssl/certs'に属していました。 .pemが制限されたフォルダ、 'private'に置かれることを除けば、.pemファイルの場合も同じです。ファイルを正しいフォルダに移動した後。それから私はcert_pathへの要求のための確認パラメタを設定することができました。

「etc/pki/tls/certs」は、Fedora配布用のディレクトリです。 'etc/ssl/certs'は、LinuxのUbuntuディストリビューションのディレクトリです。

私はこれが誰かを助けてくれることを願っています。

1

ユーザーがファイルを読み取る必要があります。 ls path_to_file.pemを実行して確認できます。

ファイルの所有権を変更した場合でも、そのファイルが格納されているディレクトリに対して実行可能なアクセス許可が不足している可能性があります。

あなたは、潜在的chmod -R +x ~/path/to_directory_containing_perm

+0

私はそのコマンドを使用してファイルへの権限を変更しましたが、運はありません。まだハンドシェイクエラーが発生しています。 –

+0

したがって、アクセス許可の変更後に例外が異なるようになりました。申し訳ありませんが、私はこの最後の夜に気づいていませんでしたが、今すぐ 'sudo -Es'として実行した後の例外のように見えます: '[( 'SSLルーチン'、 'ssl3_read_bytes'、 'tlsv1 alert unknown ca')、( 'SSLルーチン'、 'ssl3_read_bytes'、 'sslハンドシェイク失敗')] ' –

関連する問題