2015-02-24 24 views
2

我有一個問題爲什麼要求ssl認證返回html?

我想要發佈一些數據到網絡服務器並獲得響應。 Webserver有SSL證書驗證,所以我爲它提供文件。在響應中,我應該收到XML文件,但我收到一些HTML。

我小的腳本是這樣的:

import requests, sys, os 

program_directory=sys.path[0] 
verify = os.path.join(program_directory, "test.pem") 
data='some data' 

print requests.post('https://somewebsite', data=data, verify=verify).text 

這就是我的html之前得到:

C:\Python27\lib\site-packages\requests\packages\urllib3\connection.py:251: SecurityWarning: Certificate has no `subjectAltName`, falling back to check for a `commonName` for now. This feature is being removed by major browsers and deprecated by RFC 2818. (See https://github.com/shazow/urllib3/issues/497 for details.) SecurityWarning 

如果我使用verify=False並沒有提供文件,它工作正常,並返回正確的數據。什麼可能是問題,爲什麼我會收到此警告和HTML?

+0

你看過HTML嗎?這是一個很好的機會,它是一個錯誤頁面,表明出了什麼問題。 – 2015-02-24 22:02:04

+0

@JeremyBanks我更新了問題 – tinySandy 2015-02-24 22:05:08

+1

我似乎'請求'(或'urllib3,寧願)抱怨不安全的證書(見[t​​his](https://urllib3.readthedocs.org/en/latest/security.html#不安全的請求警告))。可能是因爲它是自簽名的(未經可信[證書頒發機構](http://en.wikipedia.org/wiki/Certificate_authority)驗證)您可以隨時嘗試添加自己生成的(我猜你可能已經創建一個「本地」證書頒發機構)到urllib3使用的證書頒發機構(檢查[this](https://urllib3.readthedocs.org/en/latest/security.html#using-your-system-s-root-certificates) ) – BorrajaX 2015-02-24 22:41:17

回答

3

報價GrahamDumpleton

這是因爲在老的Python版本的_ssl模塊不集中的SSL證書中的字段返回「的SubjectAltName」。該字段即使存在也不會返回,這意味着即使SSL證書有效,該檢查也會失敗並記錄警告。

要消除警告,您可以禁用全局的urllib3警告。

的請求模塊包含urllib3的捆綁版本,你很可能需要使用:

import requests 
requests.packages.urllib3.disable_warnings() 

如果你想忽略只有特定的警告,你可以使用:

from requests.packages.urllib3.exceptions import SubjectAltNameWarning 
requests.packages.urllib3.disable_warnings(SubjectAltNameWarning) 
1

Apparently這是如果您使用Python2 2.7.2或更低版本時生成的錯誤警告。

忽略警告,您可以使用從該鏈接如下:

import requests 
import warnings 
with warnings.catch_warning(): 
    warnings.simplefilter('ignore') 
    requests.post(...) 
1

你的自簽名證書不包含subjectAltName

用途:

openssl req -new -x509 -key myselfsigned.key -out myselfsigned.cer -days 365 -subj /CN=www.mysite.com 

生成證書。