massive-com / massive-com/client-python
SDK does not respect SSL_CERT_FILE or REQUESTS_CA_BUNDLE environment variables
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Python
- Star
- 1.5k
- Fork
- 362
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Mô tả
Problem
The Polygon Python SDK fails with SSL certificate verification errors when used behind corporate firewalls that perform SSL/TLS inspection. The SDK does not respect standard SSL certificate environment variables (SSL_CERT_FILE, REQUESTS_CA_BUNDLE) that specify custom CA bundles.
Steps to Reproduce
import os
from polygon import RESTClient
# Set custom CA bundle (common in enterprise environments)
os.environ["SSL_CERT_FILE"] = "/path/to/corporate-ca-bundle.pem"
# This fails with SSL error
client = RESTClient(os.getenv("POLYGON_API_KEY"))
aggs = client.get_aggs(ticker="AAPL", multiplier=1, timespan="day",
from_="2026-02-01", to="2026-02-10")
list(aggs) # SSLError: certificate verify failed
Expected Behaviour
SDK should respect SSL environment variables like other Python HTTP libraries (requests, httpx, urllib3).
Actual Behaviour
SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed:
self-signed certificate in certificate chain
SDK ignores environment variables and uses bundled certifi CA bundle only.
Evidence
Raw Python SSL (works):
import ssl, socket
context = ssl.create_default_context()
with socket.create_connection(("api.polygon.io", 443)) as sock:
with context.wrap_socket(sock, server_hostname="api.polygon.io") as s:
print(s.version()) # ✅ TLSv1.3 - Success!
Polygon SDK (fails):
Uses bundled certs, ignores SSL_CERT_FILE → certificate verification fails.
Root Cause
The SDK uses urllib3 but doesn't configure it to check standard SSL environment variables. While urllib3 supports custom CA bundles, the Polygon SDK never provides them.
Comparison: Alpaca SDK (Works Correctly)
# Alpaca SDK respects SSL_CERT_FILE and works behind corporate firewalls
from alpaca.data.historical import StockHistoricalDataClient
client = StockHistoricalDataClient(api_key, secret_key)
bars = client.get_stock_bars(...) # ✅ Works!
Suggested Fix
Check environment variables when creating HTTP client:
import os
import certifi
def get_ca_bundle():
"""Get CA bundle from environment or default."""
return (os.getenv("SSL_CERT_FILE") or
os.getenv("REQUESTS_CA_BUNDLE") or
certifi.where())
# Use in RESTClient
http = urllib3.PoolManager(cert_reqs="CERT_REQUIRED",
ca_certs=get_ca_bundle())
Impact
Affects: Enterprise users behind corporate firewalls with SSL inspection (finance, healthcare, government sectors)
Current workarounds: All unacceptable for production:
- ❌ Disable SSL verification (insecure)
- ❌ Switch to different provider
- ❌ Maintain local SDK patches
Environment
- Python: 3.10+
- OS: macOS/Linux
- Network: Corporate firewall with SSL inspection (Zscaler, etc.)
- polygon-api-client: Latest
References
- urllib3 docs: https://urllib3.readthedocs.io/en/stable/advanced-usage.html#custom-ssl-certificates
- Example implementation: alpaca-py SDK
- Standard practice: requests, httpx, aiohttp all respect these env vars
Happy to submit a PR if maintainers are open to this fix.
This issue generated with AI/Claude 4.6
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Bắt đầu từ quá trình khởi tạo RESTClient và đường đi của HTTP client urllib3 được get_aggs sử dụng; kiểm tra cách CA bundle của nó được chọn. Tái hiện request với SSL_CERT_FILE hoặc REQUESTS_CA_BUNDLE được thiết lập, sau đó xác minh rằng get_aggs thành công qua một chuỗi chứng chỉ tùy chỉnh mà không vô hiệu hóa việc xác minh.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- python
- Lĩnh vực
- api, security
- Loại issue
- Lỗi
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 45/100