python安裝ssl
⑴ python中的ssl error怎麼解決
python安裝完畢後,提示找不到ssl模塊:
[root@localhost ~]# python2.7.5
Python 2.7.5 (default, Jun 3 2013, 11:08:43)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-54)] on linux2
Type "help", "right", "credits" or "license" for more information.
>>> import ssl
Traceback (most recent call last):
File "<stdin>", line 1, in <mole>
File "/usr/local/python27/lib/python2.7/ssl.py", line 60, in <mole>
import _ssl # if we can't import it, let the error propagate
ImportError: No mole named _ssl
>>>
2. 查看openssl安裝包,發現缺少openssl-devel包
[root@localhost ~]# rpm -aq|grep openssl
openssl-0.9.8e-20.el5
openssl-0.9.8e-20.el5
[root@localhost ~]#
3. yum安裝openssl-devel
[root@localhost ~]# yum install openssl-devel -y
#查看安裝結果
[root@localhost ~]# rpm -aq|grep openssl
openssl-0.9.8e-26.el5_9.1
openssl-0.9.8e-26.el5_9.1
openssl-devel-0.9.8e-26.el5_9.1
openssl-devel-0.9.8e-26.el5_9.1
4. 重新編譯python
#修改Setup文件
vi /usr/software/Python-2.7.5/Moles/Setup
#修改結果如下:
# Socket mole helper for socket(2)
_socket socketmole.c timemole.c
# Socket mole helper for SSL support; you must comment out the other
# socket line above, and possibly edit the SSL variable:
#SSL=/usr/local/ssl
_ssl _ssl.c \
-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
-L$(SSL)/lib -lssl -lcrypto
5. 重新編譯
make
make install
6. 測試,已可正常使用。
[root@localhost ~]# python2.7.5
Python 2.7.5 (default, Jun 3 2013, 14:56:13)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-54)] on linux2
Type "help", "right", "credits" or "license" for more information.
>>> import ssl
>>>
⑵ python 鏈接https安裝什麼軟體
今天寫代碼時碰到一個問題,花了幾個小時的時間google,
首先需要安裝openssl,更新到最新版本後,在瀏覽器里看是否可訪問,如果是可以的,所以應該不是openssl有問題。
然後使用 curl嘗試訪問
curl -v
可以查看ssl版本,如果不能訪問,嘗試更換ssl版本
1
2
3
4
5
curl
-1
curl
-2 h
curl
-3
分別用上面的三句腳本去測試連接情況,發現第三種可以連接正常(-1,2,3,數字分別代碼tlsv1,sslv2,sslv3三個不同的SSL版本)。說明這個https連接所在的伺服器是基於SSLV3版本的。找到的問題,就很容易知道怎麼改寫Python代碼了。
1
2
3
4
5
6
7
8
9
class MyAdapter(HTTPAdapter):
def init_poolmanager(self,
connections, maxsize):
self.poolmanager
= PoolManager(num_pools=connections,
maxsize=maxsize,
ssl_version=ssl.PROTOCOL_SSLv3)
s
= requests.Session()
s.mount('https://',
MyAdapter())#所有的https連接都用ssl.PROTOCOL_SSLV3去連接
s.get('')
urllib2實現:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#
custom HTTPS opener, banner's oracle 10g server supports SSLv3 only
import httplib,
ssl, urllib2, socket
class HTTPSConnectionV3(httplib.HTTPSConnection):
def __init__(self,
*args,
**kwargs):
httplib.HTTPSConnection.__init__(self,
*args,
**kwargs)
def connect(self):
sock
= socket.create_connection((self.host,
self.port),
self.timeout)
if self._tunnel_host:
self.sock
= sock
self._tunnel()
try:
self.sock
= ssl.wrap_socket(sock,
self.key_file,
self.cert_file,
ssl_version=ssl.PROTOCOL_SSLv3)
except ssl.SSLError,
e:
print("Trying
SSLv3.")
self.sock
= ssl.wrap_socket(sock,
self.key_file,
self.cert_file,
ssl_version=ssl.PROTOCOL_SSLv23)
class HTTPSHandlerV3(urllib2.HTTPSHandler):
def https_open(self,
req):
return self.do_open(HTTPSConnectionV3,
req)
#
install opener
urllib2.install_opener(urllib2.build_opener(HTTPSHandlerV3()))
if __name__
== "__main__":
r
= urllib2.urlopen("https://ui2web1.apps.uillinois.e/BANPROD1/bwskfcls.P_GetCrse")
print(r.read())
可以看到這兩種方案的原理都是一樣,就是自定義連接處理器,改變連接時ssl的版本號。
⑶ kali2.0里的python如何安裝ssl模塊
我現在升級到 python 2.7了。我嘗試編譯這個mole,發現_ssl2 是ssl 的一個子模塊。希望我的回答對你有所幫助,如果滿意請設置為最佳答案,謝謝
⑷ 而SSL支持Python編譯錯誤問題,怎麼解決
sublimetext2編譯python文件出錯,解決方法:
1.環境變數path添加:
c:\python32\tools\scripts;d:\python32;d:\program files\sublime text2;
2.python.sublime-build內容修改
比如原內容:
{
"cmd": ["python", "-u", "$file"],
"file_regex": "^[ ]*file \"(...*?)\", line ([0-9]*)",
"selector": "source.python"
}
修改為(路徑為安裝文件夾):
{
"cmd": ["c:/python26/python.exe", "-u", "$file"],
"file_regex": "^[ ]*file \"(...*?)\", line ([0-9]*)",
"selector": "source.python"
}
⑸ Windows系統下Python使用pip安裝第三方包報錯SSL模塊不可用
重裝Python試試,根據圖片所示不支持SSL鏈接,不知道是引導錯誤(引導的SSL處理文件路徑不對)還是本身程序就是出錯的
⑹ Python爬取登錄界面,SSL 證書錯誤,如圖,這個這怎麼解決,請給出具體解決方案,謝謝
SSL證書,通常原因:使用非信任證書或非安全機構簽發的證書,證書沒有CA根服務不被信任,解決辦法登陸簽發機構辦法信任證書,重新安裝或者替換之前的證書就可以了:網頁鏈接
⑺ python requests請求ssl 加密 提示[SSL: CA_MD_TOO_WEAK] ca md too weak (_ssl.c:4024)')))
伺服器環境中的加密套件不支持這種加密方式。建議您升級一下加密套件版本到最新重新配置SSL。
⑻ 怎麼用python 來實現 SSL登錄ftp python中有ftplib模塊,但它是普通登錄,也有ssl模塊,怎麼來實現呢
從python 2.7開始ftplib模塊就有一個支持ftp ssl的類FTP_TLS了
具體可以看這里
http://docs.python.org/library/ftplib.html#ftplib.FTP_TLS
⑼ 如何實現python介面,的https
今天寫代碼時碰到一個問題,花了幾個小時的時間google,基本上把google搜索的前幾頁內容都一一看了下,問題最終是解決了,不過過程挺曲折的,所以把這個過程記下來以便以後參考之。
原因是以下一段代碼引起的:
?
12
import urllib2urllib2.urlopen('https://xxxx.com')
本來這段代碼很簡單的,就是請求一個https的連接,可是報以下錯誤:
?
1
urllib2.URLError:
第一反應是https證書問題產生的,如是以'python ssl' 為關鍵字google後,看到大家都在用'requests'這個python組件做http請求客戶端,就像java裡面的httpclient組件一樣,如果安裝完request包後,改成如下代碼:
?
12
import requestsrequests.get('https://xxx.com')
還是報以下錯誤:
?
1
requests.exceptions.SSLError:
[Errno 1] _ssl.c:504: error:140773E8:SSL routines:SSL23_GET_SERVER_HELLO:reason(1000)
可以看出來,用requests和urllib2報的錯誤信息是一樣,可見它們都是基於相同的底層api操作的,比如基於TLS的socket連接。到這里的時候我懷疑這個問題不是python代碼寫的有問題,可能是操作系統級別的設置錯了。如下直接在shell客戶端運行如下測試腳本:
?
1
wget
https://xxx.com
果然報如下錯誤:
?
12
OpenSSL:
error:140773E8:SSL routines:SSL23_GET_SERVER_HELLO:reason(1000)無法建立
SSL 連接。
到這里我懷疑是openssl安裝有問題,更新到最新版本後還是一樣,然後在瀏覽器里訪問是可以的,所以應該不是openssl有問題。繼續google.......,就發現有人也遇到過這種問題,說是連接SSL伺服器時SSL的版本不對,如是用如下代碼測試不同的SSL版本,看是不是這個問題:
?
12345
curl
-1 https://xxx.com curl
-2 https://xxx.com curl
-3 https://xxx.com
分別用上面的三句腳本去測試連接情況,發現第三種可以連接正常(-1,2,3,數字分別代碼tlsv1,sslv2,sslv3三個不同的SSL版本)。說明這個https連接所在的伺服器是基於SSLV3版本的。找到的問題,就很容易知道怎麼改寫python代碼了。
?
123456789
class MyAdapter(HTTPAdapter): def init_poolmanager(self,
connections, maxsize): self.poolmanager= PoolManager(num_pools=connections, maxsize=maxsize, ssl_version=ssl.PROTOCOL_SSLv3) s= requests.Session()s.mount('https://',
MyAdapter())#所有的https連接都用ssl.PROTOCOL_SSLV3去連接s.get('https://xxx.com')
urllib2實現:
?#
custom HTTPS opener, banner's oracle 10g server supports SSLv3 onlyimport httplib,
ssl, urllib2, socketclass HTTPSConnectionV3(httplib.HTTPSConnection): def __init__(self,*args,**kwargs): httplib.HTTPSConnection.__init__(self,*args,**kwargs) def connect(self): sock= socket.create_connection((self.host,self.port),self.timeout) if self._tunnel_host: self.sock= sock self._tunnel() try: self.sock= ssl.wrap_socket(sock,self.key_file,self.cert_file,
ssl_version=ssl.PROTOCOL_SSLv3) except ssl.SSLError,
e: print("Trying
SSLv3.") self.sock= ssl.wrap_socket(sock,self.key_file,self.cert_file,
ssl_version=ssl.PROTOCOL_SSLv23) class HTTPSHandlerV3(urllib2.HTTPSHandler): def https_open(self,
req): return self.do_open(HTTPSConnectionV3,
req)#
install openerurllib2.install_opener(urllib2.build_opener(HTTPSHandlerV3())) if __name__== "__main__": r= urllib2.urlopen("htANPROD1/bwskfcls.P_GetCrse") print(r.read())
可以看到這兩種方案的原理都是一樣,就是自定義連接處理器,改變連接時ssl的版本號。