InsecureRequestWarning'i bastırın: Python2.6'da doğrulanmamış HTTPS isteği yapılıyor


345

Python2.6 pyVmomi kullanarak ve bağlantı yöntemlerinden birini kullanırken komut dosyaları yazıyorum :

service_instance = connect.SmartConnect(host=args.ip,
                                        user=args.user,
                                        pwd=args.password)

Aşağıdaki uyarıyı alıyorum:

/usr/lib/python2.6/site-packages/requests/packages/urllib3/connectionpool.py:734: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.org/en/latest/security.html
  InsecureRequestWarning)

İlginç olan pip ile urllib3 yüklü değil (ama orada /usr/lib/python2.6/site-packages/requests/packages/urllib3/ ).

Burada önerildiği gibi denedim

import urllib3
...
urllib3.disable_warnings()

ama bu hiçbir şeyi değiştirmedi.


Söz konusu belirli modül için günlük düzeyini bu yanıtta açıklandığı gibi ayarlamayı deneyebilirsiniz stackoverflow.com/questions/7234262/…
Reina Abolofia

Küresel ve tamamen çalışan bir çözüm var: stackoverflow.com/questions/14463277/…
jmcollin92

2
UYARI: sertifika doğrulamasını yalnızca uzak sunucunun kimliğine bürünen bir kişiyle ilgilenmiyorsanız
ivan_pozdeev

4
uyarı, olanları gerçekten engellemez . Doğrulamayı devre dışı bırakmıyor, doğrulama eksikliğiyle ilgili uyarıyı devre dışı bırakıyor.
dwanderson

Yanıtlar:


795

PYTHONWARNINGSOrtam değişkeni aracılığıyla herhangi bir Python uyarısını devre dışı bırakabilirsiniz . Bu durumda, şunu istersiniz:

export PYTHONWARNINGS="ignore:Unverified HTTPS request"

Python kodunu ( requests >= 2.16.0) kullanmayı devre dışı bırakmak için :

import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

İçin requests < 2.16.0aşağıdaki orijinal cevaba bakınız.

Orijinal cevap

Yapıyor nedeni urllib3.disable_warnings(), isteklerin belirli urllib3 vendored iç ayrı bir örneğini kullanıyorsanız çünkü görünüşe sizsiniz için çalışma yoktu.

Bunu buradaki yola dayanarak topluyorum: /usr/lib/python2.6/site-packages/requests/packages/urllib3/connectionpool.py

İsteklerin tedarik edilen urllib3'lerindeki uyarıları devre dışı bırakmak için modülün belirli bir örneğini içe aktarmanız gerekir:

import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

Pyvmomi'de yaptığım gelişim hakkında blog yazıyorum ve bu sorunu Ekim 2014'te tekrar ele aldım. Başkalarının gelecekte yararlı pyvmomi bilgileri bulmasına yardımcı olmak için bu bağlantıyı paylaşıyorum: errr-online.com/index.php/tag/pyvmomi
Michael Rice

37
PYTHONWARNINGS="ignore:Unverified HTTPS request"
Rahul Patil

2
from requests.packages.urllib3.exceptions import InsecureRequestWarning
Bütünlük

2
Bu cevap eski. Modern bir versiyon için Nayana Adassuriya'nın cevabına bakınız.
Dakkaron

3
Nayana Adassuriya cevabı kopyalanmış: import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning).
Samuel

117

Bu 2017'nin cevabı urllib3. requestsArtık bir parçası değil

import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

7
Yıl, kullandığınız python'un revizyon sayısından daha az içe aktarılır.
CodeMonkey

3
Evet, revizyon yıldan daha önemli. Bunun içinrequests >= 2.16.0
dwanderson

Birisi urllib3 sürümünü gönderebilir miyim, bunu denediğimde, urllib3'ün '
enable_warnings

1
Bu yanıttan kafam karıştı. Benim requestsversiyonum 2.21.0ve var urllib3. Denedim 2.16.0, '2.16.1 , and 2.17.0' ve hepsi vardı urllib3. Denedim 2.4.0ve bir tane olsa da yoktu. Tekrar eklediler mi?
Mike Furlender

35

Başına bu github yorumun, tek devre dışı bırakabilir urllib3aracılığıyla istek uyarıları requests1 poşetine:

requests.packages.urllib3.disable_warnings()

Bu sadece tüm uyarıları bastırır InsecureRequest(yani aynı zamanda bastırır InsecurePlatformvb.). Sadece işlerin çalışmasını istediğimiz durumlarda, özlülüğü kullanışlı buluyorum.


4
Bu uyarıyı bastırmak için urllib3'ü içe aktarmam gerekmediğinden 2.7 için en iyi seçenektir
CodeMonkey

3
requests.packages.urllib3.disable_warnings(requests.packages.urllib3.exceptions.InsecureRequestWarning)işe yarıyor gibi görünüyor.
mattalxndr

29

Doğru yol, sağlanan bağlantıdaki ilgili bölümü okumak ve söylediği gibi yapmaktır. CA Sertifikaları - Gelişmiş Kullanım - Talep 2.8.1 belgelerine görerequests (kendi kopyasıyla birlikte gelir urllib3) için özel yol :

  • requests kendi sertifika paketiyle birlikte gönderilir (ancak yalnızca modülle birlikte güncellenebilir)
  • o (çünkü kullanacağız requests v2.4.0) paketini yükledikten yerine eğercertifi

HTTPS sertifika doğrulama güvenlik önlemi, içtenlikle atılacak bir şey değildir. Ortadaki Adam saldırısı, üçüncü bir tarafa karşı sizi korur, örneğin, bir virüsü yudumlamak , verilerinizi değiştirmek veya verilerinizi çalmak .

Bu, ağ altyapısını hedefleyen Kişiye Özel Erişim Operasyonları ve Çin'in Büyük Güvenlik Duvarı gibi hükümet destekli küresel hackleme operasyonları ile düşündüğünüzden daha muhtemeldir.


2.8.1 ve 2015.11.20.1 sertifikalarım var ve hala uyarı alıyorum.
Alex Bartiş

3
@ AlexBartiş bu siz (veya çağırdığınız bir kodu) geçerseniz olabilir verify=False.
ivan_pozdeev

2
Bu cevap için neden bu kadar az oy var? Bu uyarıları göz ardı etmek gerçekten güvenli mi?
sgryzko

1
@sgryzko Yalnızca uzak sunucuyu taklit eden birinin umrunda değilse. Muhtemelen birçoğu, ilk yanıtın ötesinde umursamıyor ve / veya okumuyor ve olumlu geribildirim döngüsüne katkıda bulunuyor. Bu cevap da neredeyse bir yıl sonra gönderildi.
ivan_pozdeev

2
Evet, bir üretim ortamında doğru olanı yapmalısınız ve hatayı körü körüne bastırmak kötüdür. Ancak bu hataları test ortamında bastırmak tamamen geçerli bir şeydir.
Vroo

12

Sabırsız, python doğrulanmamış HTTPS uyarısını devre dışı bırakmanın hızlı bir yolu:

export PYTHONWARNINGS="ignore:Unverified HTTPS request"

Powershell için komut$env:PYTHONWARNINGS="ignore:Unverified HTTPS request"
Gwen Au

10

Bazı paket satıcıları urllib3'ün kendi kopyasıysa kabul edilen cevap çalışmaz, bu durumda bu yine de çalışır:

import warnings

warnings.filterwarnings('ignore', message='Unverified HTTPS request')

1

PyVmomi Client ile benzer bir sorun yaşadım. Python Sürüm 2.7.9 ile, aşağıdaki kod satırı ile bu sorunu çözdüm:

default_sslContext = ssl._create_unverified_context()
self.client = \
                Client(<vcenterip>, username=<username>, password=<passwd>,
                       sslContext=default_sslContext )

Bunun çalışması için en azından Python 2.7.9'a ihtiyacınız olduğunu unutmayın.


1

Neden pyvmomi orijinal işlevini kullanmıyorsunuz SmartConnectNoSSL. Onlar eklenen bu işlev June 14, 2016ve adlandırılmış ConnectNoSSL, bir gün sonra onlar için adını değiştirdi SmartConnectNoSSLyerine o projenizde kod gereksiz hatları ile uyarı ileterek kullanılmasını?

SSL doğrulaması olmadan belirli bir sunucuya bağlanmak için standart bir yöntem sağlar. Kendinden imzalı sertifikaları olan sunuculara bağlanırken veya SSL'yi tamamen yoksaymak istediğinizde kullanışlıdır

service_instance = connect.SmartConnectNoSSL(host=args.ip,
                                             user=args.user,
                                             pwd=args.password)

0

İçin Python 2.7

PYTHONWARNINGS ortam değişkenini anahtar olarak ve yok sayılacak karşılık gelen değeri aşağıdaki gibi ekleyin:

os.environ['PYTHONWARNINGS']="ignore:Unverified HTTPS request"

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.