2014-04-19 63 views
4

我最近買了一個SSL證書爲我的網站:爲什麼Python的`requests`拒絕我的SSL證書,哪些瀏覽器接受

https://ram.rachum.com/ 

它在瀏覽器中的偉大工程。但它失敗requests

>>> import requests 
>>> requests.get('https://ram.rachum.com') 
Traceback (most recent call last): 
    File "<pyshell#1>", line 1, in <module> 
    requests.get('https://ram.rachum.com') 
    File "C:\Python27\lib\site-packages\requests\api.py", line 55, in get 
    return request('get', url, **kwargs) 
    File "C:\Python27\lib\site-packages\requests\api.py", line 44, in request 
    return session.request(method=method, url=url, **kwargs) 
    File "C:\Python27\lib\site-packages\requests\sessions.py", line 354, in request 
    resp = self.send(prep, **send_kwargs) 
    File "C:\Python27\lib\site-packages\requests\sessions.py", line 460, in send 
    r = adapter.send(request, **kwargs) 
    File "C:\Python27\lib\site-packages\requests\adapters.py", line 250, in send 
    raise SSLError(e) 
SSLError: hostname 'ram.rachum.com' doesn't match either of '*.webfaction.com', 'webfaction.com' 

爲什麼?爲什麼requests查看webfaction證書而不是我自己的證書,該證書適用於ram.rachum.com

回答

6

您正在使用不支持SNI(服務器名稱指示)的請求庫,但您需要在需要SNI的同一IP地址後有多個SSL證書。您可以使用openssl s_client進行驗證。如果沒有對SNI給一個名字服務器只是給這個IP默認的證書,這是* .webfaction.com:

openssl s_client -connect ram.rachum.com:443 
... 
0 ...CN=*.webfaction.com 

但是,如果你指定一個主機名SNI它返回預期的證書:

openssl s_client -connect ram.rachum.com:443 -servername ram.rachum.com 
... 
0 ...CN=ram.rachum.com... 

也許您需要升級您的請求庫和其他模塊,請參閱using requests with TLS doesn't give SNI support

+0

在Python 3下使用'requests'確實有效。謝謝! –

+0

我也使用webfaction,得到相同的錯誤消息,購買了靜態IP升級(+ $ 5 /月),但錯誤仍然存​​在。想法? –

+0

@MarcMaxson:請不要在一些舊的答案中提出問題。最好用足夠的細節(比如域名)來開一個新的問題。 –

相關問題