код:
import pycurl
class Someclass:
def __init__(self, trycount=0, cookie_file=None, log_file=None):
pycurl.global_init(pycurl.GLOBAL_ALL);
#debugging
self.debug = True;
self.curl = pycurl.Curl()
self.curl.setopt(pycurl.FOLLOWLOCATION, 1)
self.curl.setopt(pycurl.MAXREDIRS, 5)
if self.debug:
self.curl.setopt(pycurl.VERBOSE, 1)
def perform(self, url, cainfo=None, sslcert=None):
self.curl.setopt(pycurl.URL, url);
if not cainfo==None:
self.curl.setopt(pycurl.CAINFO, cainfo);
self.curl.setopt(pycurl.SSL_VERIFYHOST, 1);
if not sslcert==None:
self.curl.setopt(pycurl.SSLCERT, sslcert);
self.curl.setopt(pycurl.SSLCERTTYPE, 'PEM');
#в бубунте работало без этого
#self.curl.setopt(pycurl.SSLKEY, sslcert);
#self.curl.setopt(pycurl.SSLKEYTYPE, 'PEM');
self.curl.setopt(pycurl.SSL_SESSIONID_CACHE, 0);
self.curl.setopt(pycurl.SSL_VERIFYPEER, 0);
self.curl.perform();
и вызов класса
a = Someclass();
a.perform('https://www.somesite.net', cainfo='data/cert/somesiteca.crt', sslcert='data/cert/cert.pem'):
В Бубунте все прекрасно работает. Перенес этот код на Debian Lenny и получил следующее:
* gnutls_handshake() failed: Decryption has failed.
* GnuTLS recv error (-10): The specified session has been invalidated for some reason.
если руками курлом пробую (на дебиане)
curl -v --key ./data/cert/cert.pem --cert ./data/cert/cert.pem --cacert ./data/somesiteca.crt https://www.somesite.net:443/