Skip to content

Unable to access PyPI's CDN (files.pythonhosted.org) on macOS with IPv6 connectivity #505

Description

@segevfiner

Original Issue: pypi/warehouse#8292

I'm unable to use pip to install any packages due to it failing to access PyPI's CDN (files.pythonhosted.org), and sometimes PyPI itself, on macOS with IPv6 connectivity (Enabled & available on the network, this is a true dual-stack network, with both real IPv4 & IPv6 address, I know, right? An actual ISP that does that)

The socket gets immediately closed on connection which leads to errors like this (Which are retried until eventually giving up):

Could not fetch URL https://pypi.org/simple/requests/: connection error: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/requests/ (Caused by ProtocolError('Connection aborted.', OSError(22, 'Inv    alid argument'))) - skipping
HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Max retries exceeded with url: /packages/45/1e/0c169c6a5381e241ba7404532c16a21d86ab872c9bed8bdcd4c423954103/requests-2.24.0-py2.py3-none-any.whl (Caused by ProtocolError('Connection aborted.', OSError(22, 'Invalid argument')))

getpeername on macOS returns with errno EINVAL when the socket is closed.

Disabling IPv6 external connectivity by setting "Configure IPv6" to "Link-local only" in macOS network preferences causes pip to work again, but is obviously not desired.

My Platform

pip 20.1.1
Python 3.8.4 from Homebrew
macOS 10.14.6
A dual-stack IPv4/IPv6 network. Has both a public IPv4 address behind local router NAT, and IPv6 connectivity.

Network telemetry

DNS Resolution

dig pypi.org A

; <<>> DiG 9.10.6 <<>> pypi.org A
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35797
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;pypi.org.			IN	A

;; ANSWER SECTION:
pypi.org.		7743	IN	A	151.101.192.223
pypi.org.		7743	IN	A	151.101.128.223
pypi.org.		7743	IN	A	151.101.0.223
pypi.org.		7743	IN	A	151.101.64.223

;; Query time: 75 msec
;; SERVER: 2001:4860:4860::8888#53(2001:4860:4860::8888)
;; WHEN: Mon Jul 20 18:39:15 IDT 2020
;; MSG SIZE  rcvd: 101
dig pypi.org AAAA

; <<>> DiG 9.10.6 <<>> pypi.org AAAA
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40587
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;pypi.org.			IN	AAAA

;; ANSWER SECTION:
pypi.org.		6497	IN	AAAA	2a04:4e42:400::223
pypi.org.		6497	IN	AAAA	2a04:4e42:200::223
pypi.org.		6497	IN	AAAA	2a04:4e42:600::223
pypi.org.		6497	IN	AAAA	2a04:4e42::223

;; Query time: 75 msec
;; SERVER: 2001:4860:4860::8888#53(2001:4860:4860::8888)
;; WHEN: Mon Jul 20 18:39:41 IDT 2020
;; MSG SIZE  rcvd: 149
dig files.pythonhosted.org A

; <<>> DiG 9.10.6 <<>> files.pythonhosted.org A
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56495
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;files.pythonhosted.org.		IN	A

;; ANSWER SECTION:
files.pythonhosted.org.	20726	IN	CNAME	dualstack.r.ssl.global.fastly.net.
dualstack.r.ssl.global.fastly.net. 25 IN A	151.101.1.63
dualstack.r.ssl.global.fastly.net. 25 IN A	151.101.65.63
dualstack.r.ssl.global.fastly.net. 25 IN A	151.101.129.63
dualstack.r.ssl.global.fastly.net. 25 IN A	151.101.193.63

;; Query time: 94 msec
;; SERVER: 2001:4860:4860::8888#53(2001:4860:4860::8888)
;; WHEN: Mon Jul 20 18:41:41 IDT 2020
;; MSG SIZE  rcvd: 162
dig files.pythonhosted.org AAAA

; <<>> DiG 9.10.6 <<>> files.pythonhosted.org AAAA
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64524
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;files.pythonhosted.org.		IN	AAAA

;; ANSWER SECTION:
files.pythonhosted.org.	5887	IN	CNAME	dualstack.r.ssl.global.fastly.net.
dualstack.r.ssl.global.fastly.net. 25 IN AAAA	2a04:4e42::319
dualstack.r.ssl.global.fastly.net. 25 IN AAAA	2a04:4e42:200::319
dualstack.r.ssl.global.fastly.net. 25 IN AAAA	2a04:4e42:400::319
dualstack.r.ssl.global.fastly.net. 25 IN AAAA	2a04:4e42:600::319

;; Query time: 78 msec
;; SERVER: 2001:4860:4860::8888#53(2001:4860:4860::8888)
;; WHEN: Mon Jul 20 18:41:53 IDT 2020
;; MSG SIZE  rcvd: 210

Traceroutes

IPv4

traceroute -m 32 pypi.org
traceroute: Warning: pypi.org has multiple addresses; using 151.101.128.223
traceroute to pypi.org (151.101.128.223), 32 hops max, 52 byte packets
 1  192.168.1.1 (192.168.1.1)  3.785 ms  2.376 ms  1.154 ms
 2  10.162.48.1 (10.162.48.1)  12.901 ms  12.225 ms  12.180 ms
 3  * * *
 4  * * *
 5  * * *
 6  if-be-10.ecore1.fr0-frankfurt.as6453.net (80.231.65.4)  94.720 ms  87.756 ms *
 7  ae-27.r00.frnkge13.de.bb.gin.ntt.net (129.250.8.233)  77.672 ms  93.395 ms  92.477 ms
 8  * * *
 9  * * *
10  * * *
11  * * *
12  * * *
13  * * *
14  * * *
15  * * *
16  * * *
17  * * *
18  * * *
19  * * *
20  * * *
21  * * *
22  * * *
23  * * *
24  * * *
25  * * *
26  * * *
27  * * *
28  * * *
29  * * *
30  * * *
31  * * *
32  * * *
traceroute -m 32 files.pythonhosted.org
traceroute: Warning: files.pythonhosted.org has multiple addresses; using 151.101.1.63
traceroute to dualstack.r.ssl.global.fastly.net (151.101.1.63), 32 hops max, 52 byte packets
 1  192.168.1.1 (192.168.1.1)  1.996 ms  5.248 ms  2.442 ms
 2  10.162.48.1 (10.162.48.1)  15.389 ms  14.127 ms  10.216 ms
 3  * * *
 4  * * *
 5  * * *
 6  if-be-10.ecore1.fr0-frankfurt.as6453.net (80.231.65.4)  104.020 ms  101.524 ms  95.282 ms
 7  ae-27.r00.frnkge13.de.bb.gin.ntt.net (129.250.8.233)  76.129 ms  80.924 ms  77.853 ms
 8  * * *
 9  * * *
10  * * *
11  * * *
12  * * *
13  * * *
14  * * *
15  * * *
16  * * *
17  * * *
18  * * *
19  * * *
20  * * *
21  * * *
22  * * *
23  * * *
24  * * *
25  * * *
26  * * *
27  * * *
28  * * *
29  * * *
30  * * *
31  * * *
32  * * *

IPv6 (If available)

traceroute6 -m 32 pypi.org
traceroute6: Warning: pypi.org has multiple addresses; using 2a04:4e42:600::223
traceroute6 to pypi.org (2a04:4e42:600::223) from 2a00:a040:187:319b:876:977f:334c:a28d, 32 hops max, 12 byte packets
 1  2a00:a040:187:319b:2ee4:12ff:fee8:a2e0  2.248 ms  3.290 ms  3.147 ms
 2  2a00:a040:187:2000::1  12.181 ms  11.527 ms  20.054 ms
 3  * * *
 4  * * *
 5  * * *
 6  2a00:a040:3:236::2  39.387 ms  16.985 ms  13.950 ms
 7  2a00:a040:3:231::1  18.267 ms *  16.378 ms
 8  2a00:a040:3:1:15::22  69.517 ms  66.248 ms  65.226 ms
 9  ix-et-1-1-2-0.thar1.lrt-london.ipv6.as6453.net  75.086 ms  78.070 ms  73.111 ms
10  if-ae-5-2.tcore1.l78-london.ipv6.as6453.net  83.848 ms  92.035 ms  86.876 ms
11  if-ae-2-2.tcore2.l78-london.ipv6.as6453.net  76.251 ms  70.100 ms  73.640 ms
12  if-ae-14-2.tcore2.av2-amsterdam.ipv6.as6453.net  83.426 ms  82.926 ms  78.412 ms
13  if-ae-2-2.tcore1.av2-amsterdam.ipv6.as6453.net  86.659 ms  86.966 ms  83.542 ms
14  if-ae-6-2.tcore1.fnm-frankfurt.ipv6.as6453.net  73.370 ms  70.120 ms  95.918 ms
15  if-ae-9-2.tcore2.fr0-frankfurt.ipv6.as6453.net  93.402 ms  75.806 ms  70.928 ms
16  2003:0:130c:8024::1  81.405 ms  84.639 ms  86.287 ms
17  * * *
18  * * *
19  * * *
20  * * *
21  * * *
22  * * *
23  * * *
24  * * *
25  * * *
26  * * *
27  * * *
28  * * *
29  * * *
30  * * *
31  * * *
32  * * *
traceroute6 -m 32 files.pythonhosted.org
traceroute6 to dualstack.r.ssl.global.fastly.net (2a04:4e42:1b::319) from 2a00:a040:187:319b:876:977f:334c:a28d, 32 hops max, 12 byte packets
 1  2a00:a040:187:319b:2ee4:12ff:fee8:a2e0  3.497 ms  3.223 ms  3.147 ms
 2  2a00:a040:187:2000::1  10.188 ms  10.579 ms  13.670 ms
 3  2a00:a040:0:1:231::115  16.519 ms  14.881 ms  11.435 ms
 4  2a00:a040:0:1::d  15.506 ms  13.648 ms  14.872 ms
 5  *
    2a00:a040:0:70::2  2468.701 ms *
 6  2a00:a040:0:1::d  67.719 ms * *
 7  *
    2a00:a040:0:70::2  2433.040 ms *
 8  2a00:a040:0:1::d  120.273 ms * *
 9  2a00:a040:0:70::2  2679.739 ms  2552.362 ms *
10  * * *
11  *
    2a00:a040:0:70::2  2969.904 ms *
12  *
    2a00:a040:0:1::d  289.728 ms *
13  2a00:a040:0:70::2  2633.161 ms  2639.357 ms *
14  2a00:a040:0:1::d  359.580 ms *  331.070 ms
15  *
    2a00:a040:0:70::2  2781.373 ms *
16  * * *
17  2a00:a040:0:70::2  2928.809 ms  2764.826 ms  2764.067 ms
18  * * *
19  2a00:a040:0:70::2  2566.293 ms *  2766.364 ms
20  * * *
21  *
    2a00:a040:0:70::2  2653.726 ms  2888.933 ms
22  * *
    2a00:a040:0:1::d  622.188 ms
23  2a00:a040:0:70::2  3069.460 ms  3030.698 ms *
24  * * *
25  2a00:a040:0:70::2  2966.785 ms *  3250.762 ms
26  * * *
27  2a00:a040:0:70::2  2850.221 ms  2904.268 ms *
28  * * *
29  2a00:a040:0:70::2  3147.588 ms *  3066.634 ms
30  * * *
31  2a00:a040:0:70::2  3116.597 ms  3198.083 ms *
32  *
    2a00:a040:0:1::d  834.905 ms *

HTTPS Requests

IPv4

curl -vvv -I --ipv4 https://pypi.org/pypi/pip/json
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 151.101.0.223...
* TCP_NODELAY set
* Connected to pypi.org (151.101.0.223) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/cert.pem
  CApath: none
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
} [214 bytes data]
* TLSv1.2 (IN), TLS handshake, Server hello (2):
{ [102 bytes data]
* TLSv1.2 (IN), TLS handshake, Certificate (11):
{ [3390 bytes data]
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
{ [300 bytes data]
* TLSv1.2 (IN), TLS handshake, Server finished (14):
{ [4 bytes data]
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
} [37 bytes data]
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
} [1 bytes data]
* TLSv1.2 (OUT), TLS handshake, Finished (20):
} [16 bytes data]

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* TLSv1.2 (IN), TLS change cipher, Client hello (1):
{ [1 bytes data]
* TLSv1.2 (IN), TLS handshake, Finished (20):
{ [16 bytes data]
* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
* ALPN, server accepted to use h2
* Server certificate:
*  subject: businessCategory=Private Organization; jurisdictionCountryName=US; jurisdictionStateOrProvinceName=Delaware; serialNumber=3359300; C=US; ST=New Hampshire; L=Wolfeboro; O=Python Software Foundation; CN=www.python.org
*  start date: Sep 18 00:00:00 2018 GMT
*  expire date: Oct 14 12:00:00 2020 GMT
*  subjectAltName: host "pypi.org" matched cert's "pypi.org"
*  issuer: C=US; O=DigiCert Inc; OU=www.digicert.com; CN=DigiCert SHA2 Extended Validation Server CA
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x7fc2ee80d800)
> HEAD /pypi/pip/json HTTP/2
> Host: pypi.org
> User-Agent: curl/7.54.0
> Accept: */*
> 
* Connection state changed (MAX_CONCURRENT_STREAMS updated)!
< HTTP/2 200 
< access-control-allow-headers: Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since
< access-control-allow-methods: GET
< access-control-allow-origin: *
< access-control-expose-headers: X-PyPI-Last-Serial
< access-control-max-age: 86400
< cache-control: max-age=900, public
< content-security-policy: base-uri 'self'; block-all-mixed-content; connect-src 'self' https://api.github.com/repos/ *.fastly-insights.com sentry.io https://api.pwnedpasswords.com https://2p66nmmycsj3.statuspage.io; default-src 'none'; font-src 'self' fonts.gstatic.com; form-action 'self'; frame-ancestors 'none'; frame-src 'none'; img-src 'self' https://warehouse-camo.ingress.cmh1.psfhosted.org/ www.google-analytics.com *.fastly-insights.com; script-src 'self' www.googletagmanager.com www.google-analytics.com *.fastly-insights.com https://cdn.ravenjs.com; style-src 'self' fonts.googleapis.com; worker-src *.fastly-insights.com
< content-type: application/json
< etag: "1bScw84sINFW/pIshXUiKQ"
< referrer-policy: origin-when-cross-origin
< server: nginx/1.13.9
< x-pypi-last-serial: 7292768
< accept-ranges: bytes
< date: Mon, 20 Jul 2020 16:36:26 GMT
< x-served-by: cache-bwi5120-BWI, cache-hhn4032-HHN
< x-cache: HIT, HIT
< x-cache-hits: 5, 3
< x-timer: S1595262986.456242,VS0,VE0
< vary: Accept-Encoding, Accept-Encoding
< strict-transport-security: max-age=31536000; includeSubDomains; preload
< x-frame-options: deny
< x-xss-protection: 1; mode=block
< x-content-type-options: nosniff
< x-permitted-cross-domain-policies: none
< content-length: 99851
< 

  0 99851    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0
* Connection #0 to host pypi.org left intact
HTTP/2 200 
access-control-allow-headers: Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since
access-control-allow-methods: GET
access-control-allow-origin: *
access-control-expose-headers: X-PyPI-Last-Serial
access-control-max-age: 86400
cache-control: max-age=900, public
content-security-policy: base-uri 'self'; block-all-mixed-content; connect-src 'self' https://api.github.com/repos/ *.fastly-insights.com sentry.io https://api.pwnedpasswords.com https://2p66nmmycsj3.statuspage.io; default-src 'none'; font-src 'self' fonts.gstatic.com; form-action 'self'; frame-ancestors 'none'; frame-src 'none'; img-src 'self' https://warehouse-camo.ingress.cmh1.psfhosted.org/ www.google-analytics.com *.fastly-insights.com; script-src 'self' www.googletagmanager.com www.google-analytics.com *.fastly-insights.com https://cdn.ravenjs.com; style-src 'self' fonts.googleapis.com; worker-src *.fastly-insights.com
content-type: application/json
etag: "1bScw84sINFW/pIshXUiKQ"
referrer-policy: origin-when-cross-origin
server: nginx/1.13.9
x-pypi-last-serial: 7292768
accept-ranges: bytes
date: Mon, 20 Jul 2020 16:36:26 GMT
x-served-by: cache-bwi5120-BWI, cache-hhn4032-HHN
x-cache: HIT, HIT
x-cache-hits: 5, 3
x-timer: S1595262986.456242,VS0,VE0
vary: Accept-Encoding, Accept-Encoding
strict-transport-security: max-age=31536000; includeSubDomains; preload
x-frame-options: deny
x-xss-protection: 1; mode=block
x-content-type-options: nosniff
x-permitted-cross-domain-policies: none
content-length: 99851
curl -vvv -I --ipv4 https://files.pythonhosted.org/packages/ae/e8/2340d46ecadb1692a1e455f13f75e596d4eab3d11a57446f08259dee8f02/pip-10.0.1.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 151.101.1.63...
* TCP_NODELAY set
* Connected to files.pythonhosted.org (151.101.1.63) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/cert.pem
  CApath: none
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
} [228 bytes data]
* TLSv1.2 (IN), TLS handshake, Server hello (2):
{ [102 bytes data]
* TLSv1.2 (IN), TLS handshake, Certificate (11):
{ [3675 bytes data]
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
{ [300 bytes data]
* TLSv1.2 (IN), TLS handshake, Server finished (14):
{ [4 bytes data]
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
} [37 bytes data]
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
} [1 bytes data]
* TLSv1.2 (OUT), TLS handshake, Finished (20):
} [16 bytes data]
* TLSv1.2 (IN), TLS change cipher, Client hello (1):
{ [1 bytes data]
* TLSv1.2 (IN), TLS handshake, Finished (20):
{ [16 bytes data]
* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
* ALPN, server accepted to use h2
* Server certificate:
*  subject: C=US; ST=California; L=San Francisco; O=Fastly, Inc; CN=r.ssl.fastly.net
*  start date: Jul 13 17:46:11 2020 GMT
*  expire date: Apr 28 19:20:25 2021 GMT
*  subjectAltName: host "files.pythonhosted.org" matched cert's "*.pythonhosted.org"
*  issuer: C=BE; O=GlobalSign nv-sa; CN=GlobalSign CloudSSL CA - SHA256 - G3
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x7f9438800400)
> HEAD /packages/ae/e8/2340d46ecadb1692a1e455f13f75e596d4eab3d11a57446f08259dee8f02/pip-10.0.1.tar.gz HTTP/2
> Host: files.pythonhosted.org
> User-Agent: curl/7.54.0
> Accept: */*
> 
* Connection state changed (MAX_CONCURRENT_STREAMS updated)!
< HTTP/2 200 
< last-modified: Wed, 26 Feb 2020 17:47:37 GMT
< etag: "83a177756e2c801d0b3a6f7b0d4f3f7e"
< content-type: binary/octet-stream
< x-goog-hash: crc32c=Om2N1A==
< x-goog-hash: md5=g6F3dW4sgB0LOm97DU8/fg==
< server: UploadServer
< cache-control: max-age=365000000, immutable, public
< accept-ranges: bytes
< date: Mon, 20 Jul 2020 16:36:56 GMT
< age: 300585
< x-served-by: cache-sea4462-SEA, cache-hhn4066-HHN
< x-cache: HIT, HIT
< x-cache-hits: 1, 1
< x-timer: S1595263017.878862,VS0,VE5
< strict-transport-security: max-age=31536000; includeSubDomains; preload
< x-frame-options: deny
< x-xss-protection: 1; mode=block
< x-content-type-options: nosniff
< x-permitted-cross-domain-policies: none
< x-robots-header: noindex
< content-length: 1246072
< 

  0 1216k    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
* Connection #0 to host files.pythonhosted.org left intact
HTTP/2 200 
last-modified: Wed, 26 Feb 2020 17:47:37 GMT
etag: "83a177756e2c801d0b3a6f7b0d4f3f7e"
content-type: binary/octet-stream
x-goog-hash: crc32c=Om2N1A==
x-goog-hash: md5=g6F3dW4sgB0LOm97DU8/fg==
server: UploadServer
cache-control: max-age=365000000, immutable, public
accept-ranges: bytes
date: Mon, 20 Jul 2020 16:36:56 GMT
age: 300585
x-served-by: cache-sea4462-SEA, cache-hhn4066-HHN
x-cache: HIT, HIT
x-cache-hits: 1, 1
x-timer: S1595263017.878862,VS0,VE5
strict-transport-security: max-age=31536000; includeSubDomains; preload
x-frame-options: deny
x-xss-protection: 1; mode=block
x-content-type-options: nosniff
x-permitted-cross-domain-policies: none
x-robots-header: noindex
content-length: 1246072

IPv6 (If available)

curl -vvv -I --ipv6 https://pypi.org/pypi/pip/json
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 2a04:4e42:600::223...
* TCP_NODELAY set
* Connected to pypi.org (2a04:4e42:600::223) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/cert.pem
  CApath: none
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
} [214 bytes data]
* TLSv1.2 (IN), TLS handshake, Server hello (2):
{ [102 bytes data]
* TLSv1.2 (IN), TLS handshake, Certificate (11):
{ [3390 bytes data]
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
{ [300 bytes data]
* TLSv1.2 (IN), TLS handshake, Server finished (14):
{ [4 bytes data]
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
} [37 bytes data]
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
} [1 bytes data]
* TLSv1.2 (OUT), TLS handshake, Finished (20):
} [16 bytes data]

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* TLSv1.2 (IN), TLS change cipher, Client hello (1):
{ [1 bytes data]
* TLSv1.2 (IN), TLS handshake, Finished (20):
{ [16 bytes data]
* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
* ALPN, server accepted to use h2
* Server certificate:
*  subject: businessCategory=Private Organization; jurisdictionCountryName=US; jurisdictionStateOrProvinceName=Delaware; serialNumber=3359300; C=US; ST=New Hampshire; L=Wolfeboro; O=Python Software Foundation; CN=www.python.org
*  start date: Sep 18 00:00:00 2018 GMT
*  expire date: Oct 14 12:00:00 2020 GMT
*  subjectAltName: host "pypi.org" matched cert's "pypi.org"
*  issuer: C=US; O=DigiCert Inc; OU=www.digicert.com; CN=DigiCert SHA2 Extended Validation Server CA
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x7ffc20803c00)
> HEAD /pypi/pip/json HTTP/2
> Host: pypi.org
> User-Agent: curl/7.54.0
> Accept: */*
> 
* Connection state changed (MAX_CONCURRENT_STREAMS updated)!
< HTTP/2 200 
< access-control-allow-headers: Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since
< access-control-allow-methods: GET
< access-control-allow-origin: *
< access-control-expose-headers: X-PyPI-Last-Serial
< access-control-max-age: 86400
< cache-control: max-age=900, public
< content-security-policy: base-uri 'self'; block-all-mixed-content; connect-src 'self' https://api.github.com/repos/ *.fastly-insights.com sentry.io https://api.pwnedpasswords.com https://2p66nmmycsj3.statuspage.io; default-src 'none'; font-src 'self' fonts.gstatic.com; form-action 'self'; frame-ancestors 'none'; frame-src 'none'; img-src 'self' https://warehouse-camo.ingress.cmh1.psfhosted.org/ www.google-analytics.com *.fastly-insights.com; script-src 'self' www.googletagmanager.com www.google-analytics.com *.fastly-insights.com https://cdn.ravenjs.com; style-src 'self' fonts.googleapis.com; worker-src *.fastly-insights.com
< content-type: application/json
< etag: "1bScw84sINFW/pIshXUiKQ"
< referrer-policy: origin-when-cross-origin
< server: nginx/1.13.9
< x-pypi-last-serial: 7292768
< accept-ranges: bytes
< date: Mon, 20 Jul 2020 16:37:33 GMT
< x-served-by: cache-bwi5120-BWI, cache-hhn4020-HHN
< x-cache: HIT, HIT
< x-cache-hits: 5, 2
< x-timer: S1595263053.122044,VS0,VE0
< vary: Accept-Encoding, Accept-Encoding
< strict-transport-security: max-age=31536000; includeSubDomains; preload
< x-frame-options: deny
< x-xss-protection: 1; mode=block
< x-content-type-options: nosniff
< x-permitted-cross-domain-policies: none
< content-length: 99851
< 

  0 99851    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
* Connection #0 to host pypi.org left intact
HTTP/2 200 
access-control-allow-headers: Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since
access-control-allow-methods: GET
access-control-allow-origin: *
access-control-expose-headers: X-PyPI-Last-Serial
access-control-max-age: 86400
cache-control: max-age=900, public
content-security-policy: base-uri 'self'; block-all-mixed-content; connect-src 'self' https://api.github.com/repos/ *.fastly-insights.com sentry.io https://api.pwnedpasswords.com https://2p66nmmycsj3.statuspage.io; default-src 'none'; font-src 'self' fonts.gstatic.com; form-action 'self'; frame-ancestors 'none'; frame-src 'none'; img-src 'self' https://warehouse-camo.ingress.cmh1.psfhosted.org/ www.google-analytics.com *.fastly-insights.com; script-src 'self' www.googletagmanager.com www.google-analytics.com *.fastly-insights.com https://cdn.ravenjs.com; style-src 'self' fonts.googleapis.com; worker-src *.fastly-insights.com
content-type: application/json
etag: "1bScw84sINFW/pIshXUiKQ"
referrer-policy: origin-when-cross-origin
server: nginx/1.13.9
x-pypi-last-serial: 7292768
accept-ranges: bytes
date: Mon, 20 Jul 2020 16:37:33 GMT
x-served-by: cache-bwi5120-BWI, cache-hhn4020-HHN
x-cache: HIT, HIT
x-cache-hits: 5, 2
x-timer: S1595263053.122044,VS0,VE0
vary: Accept-Encoding, Accept-Encoding
strict-transport-security: max-age=31536000; includeSubDomains; preload
x-frame-options: deny
x-xss-protection: 1; mode=block
x-content-type-options: nosniff
x-permitted-cross-domain-policies: none
content-length: 99851
curl -vvv -I --ipv6 https://files.pythonhosted.org/packages/ae/e8/2340d46ecadb1692a1e455f13f75e596d4eab3d11a57446f08259dee8f02/pip-10.0.1.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 2a04:4e42::319...
* TCP_NODELAY set

  0     0    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:02 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:03 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:04 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:05 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:06 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:07 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:08 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:09 --:--:--     0* getpeername() failed with errno 22: Invalid argument
* Connected to files.pythonhosted.org () port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/cert.pem
  CApath: none
* LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to files.pythonhosted.org:443 

  0     0    0     0    0     0      0      0 --:--:--  0:00:09 --:--:--     0
* Closing connection 0
curl: (35) getpeername() failed with errno 22: Invalid argument

TLS Debug

IPv4

echo -n | openssl s_client -4 -connect pypi.org:443
depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert High Assurance EV Root CA
verify return:1
depth=1 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert SHA2 Extended Validation Server CA
verify return:1
depth=0 businessCategory = Private Organization, jurisdictionCountryName = US, jurisdictionStateOrProvinceName = Delaware, serialNumber = 3359300, C = US, ST = New Hampshire, L = Wolfeboro, O = Python Software Foundation, CN = www.python.org
verify return:1
CONNECTED(00000005)
---
Certificate chain
 0 s:/businessCategory=Private Organization/jurisdictionCountryName=US/jurisdictionStateOrProvinceName=Delaware/serialNumber=3359300/C=US/ST=New Hampshire/L=Wolfeboro/O=Python Software Foundation/CN=www.python.org
   i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 Extended Validation Server CA
 1 s:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 Extended Validation Server CA
   i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert High Assurance EV Root CA
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIIczCCB1ugAwIBAgIQDl7PGBeDAG2brEU2EfVJEjANBgkqhkiG9w0BAQsFADB1
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMTQwMgYDVQQDEytEaWdpQ2VydCBTSEEyIEV4dGVuZGVk
IFZhbGlkYXRpb24gU2VydmVyIENBMB4XDTE4MDkxODAwMDAwMFoXDTIwMTAxNDEy
MDAwMFowgdgxHTAbBgNVBA8MFFByaXZhdGUgT3JnYW5pemF0aW9uMRMwEQYLKwYB
BAGCNzwCAQMTAlVTMRkwFwYLKwYBBAGCNzwCAQITCERlbGF3YXJlMRAwDgYDVQQF
EwczMzU5MzAwMQswCQYDVQQGEwJVUzEWMBQGA1UECBMNTmV3IEhhbXBzaGlyZTES
MBAGA1UEBxMJV29sZmVib3JvMSMwIQYDVQQKExpQeXRob24gU29mdHdhcmUgRm91
bmRhdGlvbjEXMBUGA1UEAxMOd3d3LnB5dGhvbi5vcmcwggEiMA0GCSqGSIb3DQEB
AQUAA4IBDwAwggEKAoIBAQD2roGTDc+m3g3mReIf7j5rzLovnk3Zggvy2kWWMnDB
Yz2m6sgxOL1pkzIu7YNe4noH7ZRym0OIQjZbDIleB7SOGAoD2BBv+Mv79HtedJ3d
vhXwmgRenlNxBxhDcaVLDONVC9Ir3Ft46uuGIrXnKB8L1KZV6h8IFC2G3GZXJtkw
EojXdmJFzuRrKMRi0cLPlF60upRISIj3jg9kK4D+f0xYrsQAJvK0veqRsNQ8bXPE
YR8kG4Paj7rOeh3FVGxrKOKNpoI+kV6EqOVIhJY698P7EbDLGjG2Im9P6VFmwXod
YAZ2CTFaMlrC0FljAO/FKeQKR29vitthLMutcd+AkoDDAgMBAAGjggSZMIIElTAf
BgNVHSMEGDAWgBQ901Cl1qCt7vNKYApl0yHU+PjWDzAdBgNVHQ4EFgQUUTsyHAXZ
y6d2HWn+8MZNUhBCkEwwggFCBgNVHREEggE5MIIBNYIOd3d3LnB5dGhvbi5vcmeC
D2RvY3MucHl0aG9uLm9yZ4IPYnVncy5weXRob24ub3Jngg93aWtpLnB5dGhvbi5v
cmeCDWhnLnB5dGhvbi5vcmeCD21haWwucHl0aG9uLm9yZ4IPcHlwaS5weXRob24u
b3JnghRwYWNrYWdpbmcucHl0aG9uLm9yZ4IQbG9naW4ucHl0aG9uLm9yZ4ISZGlz
Y3Vzcy5weXRob24ub3Jnggx1cy5weWNvbi5vcmeCB3B5cGkuaW+CDGRvY3MucHlw
aS5pb4IIcHlwaS5vcmeCDWRvY3MucHlwaS5vcmeCD2RvbmF0ZS5weXBpLm9yZ4IT
ZGV2Z3VpZGUucHl0aG9uLm9yZ4ITd3d3LmJ1Z3MucHl0aG9uLm9yZ4IKcHl0aG9u
Lm9yZzAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUF
BwMCMHUGA1UdHwRuMGwwNKAyoDCGLmh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9z
aGEyLWV2LXNlcnZlci1nMi5jcmwwNKAyoDCGLmh0dHA6Ly9jcmw0LmRpZ2ljZXJ0
LmNvbS9zaGEyLWV2LXNlcnZlci1nMi5jcmwwSwYDVR0gBEQwQjA3BglghkgBhv1s
AgEwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cuZGlnaWNlcnQuY29tL0NQUzAH
BgVngQwBATCBiAYIKwYBBQUHAQEEfDB6MCQGCCsGAQUFBzABhhhodHRwOi8vb2Nz
cC5kaWdpY2VydC5jb20wUgYIKwYBBQUHMAKGRmh0dHA6Ly9jYWNlcnRzLmRpZ2lj
ZXJ0LmNvbS9EaWdpQ2VydFNIQTJFeHRlbmRlZFZhbGlkYXRpb25TZXJ2ZXJDQS5j
cnQwDAYDVR0TAQH/BAIwADCCAX8GCisGAQQB1nkCBAIEggFvBIIBawFpAHcA7ku9
t3XOYLrhQmkfq+GeZqMPfl+wctiDAMR7iXqo/csAAAFl7l3MWwAABAMASDBGAiEA
qfAJSfOHG4r8YvzTkZsr8cEXFcnFIns40+JXVdgY0vsCIQCvnB+YExtMRQVQXONc
glOTsIYmNgYPrtyHYsTj/Xua5QB3AFYUBpov18Ls0/XhvUSyPsdGdrm8mRFcwO+U
mFXWidDdAAABZe5dzHoAAAQDAEgwRgIhAIF6xXakKVdREciK8aM2z1c71eiU8qF/
UCZbl4sEfLTQAiEA870pR9Hazod3FgZszr9itk8sYPLoQjV9/WENl0HXXGwAdQC7
2d+8H4pxtZOUI5eqkntHOFeVCqtS6BqQlmQ2jh7RhQAAAWXuXcwzAAAEAwBGMEQC
IAeIvcaqPATJrCo3+ceBlVbsyPJcDPM7QGLpaRPFBduQAiBHNfcsBLaelS9bUmfU
R0VjJLoTA39AJAj8oU6iAzruHDANBgkqhkiG9w0BAQsFAAOCAQEAwH5+PXougfo5
qMVIE65Dei/CEb4ahZfoMvvlJRvuNAI/ARWYQSHh6IKXdxFxIE5hCC/NNtdAcc1p
CoZ2+IM/x0cGBjHZegSjhXfQy+w7twfgyeTSNalV2jzKQ0Yv/JvfI9qiMdhEQbfL
qaQ6Nj/js8uvQqWf6w8yo7hAzKs1jTF7Wy/cM0lvqNocDWYROhAVcI+jSMKwlcLv
75xAbOZqw2D483mkQizVj7wQ1fYP3Tr0wfvFNeoIAPUXLrEHiEmHWA0h+U9KEgVf
VQ3PvzItecKWFI+0d9RpNupc1HdipBCySvnNa1LcG2AviYXpIsbo8EBvbj0HcEVx
7NEANHNX2g==
-----END CERTIFICATE-----
subject=/businessCategory=Private Organization/jurisdictionCountryName=US/jurisdictionStateOrProvinceName=Delaware/serialNumber=3359300/C=US/ST=New Hampshire/L=Wolfeboro/O=Python Software Foundation/CN=www.python.org
issuer=/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 Extended Validation Server CA
---
No client certificate CA names sent
Server Temp Key: ECDH, X25519, 253 bits
---
SSL handshake has read 4001 bytes and written 293 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-GCM-SHA256
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES128-GCM-SHA256
    Session-ID: 033D546B62DB8A0F252E5C1D9B42C37C08F7EF9190ED1AB44D43295B6A6D9278
    Session-ID-ctx: 
    Master-Key: 225E1AF122A40B9A33AF1C21A74F4017530E05DB88A42902A68B4A68C817921E91A80803419784464D6089A550AE7F64
    TLS session ticket lifetime hint: 7200 (seconds)
    TLS session ticket:
    0000 - bf 22 e3 13 85 4e 84 47-b8 70 98 dc d2 12 a8 7b   ."...N.G.p.....{
    0010 - 1f 11 61 53 5e 77 4a 15-71 c1 75 f1 85 91 4e e7   ..aS^wJ.q.u...N.
    0020 - 66 82 27 33 e4 80 c4 fd-3d 66 72 79 73 99 c4 6e   f.'3....=frys..n
    0030 - f2 f3 d3 09 9e f2 d4 55-e2 df fe 69 c2 e5 be a0   .......U...i....
    0040 - 60 f4 cf c7 49 0e ea 22-59 a8 bf dd 1c dc e0 0b   `...I.."Y.......
    0050 - 70 2e 79 64 71 4e a5 2b-3e 7b 42 dd 8a 60 08 db   p.ydqN.+>{B..`..
    0060 - 67 90 4d a0 0c 2b a1 c7-ce 2b 9d 4b 4e 71 53 f3   g.M..+...+.KNqS.
    0070 - 20 eb 2d 90 02 18 07 13-c4 4c fb e7 ca 92 b9 40    .-......L.....@
    0080 - 80 6c ef 93 d1 15 f3 f1-ad b7 aa dc 38 3d 55 ff   .l..........8=U.
    0090 - c8 7f bb 66 6d d0 8e 77-1e b2 61 1f 68 66 7f a5   ...fm..w..a.hf..

    Start Time: 1595263219
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
---
DONE
echo -n | openssl s_client -4 -connect files.pythonhosted.org:443
depth=2 C = BE, O = GlobalSign nv-sa, OU = Root CA, CN = GlobalSign Root CA
verify return:1
depth=1 C = BE, O = GlobalSign nv-sa, CN = GlobalSign CloudSSL CA - SHA256 - G3
verify return:1
depth=0 C = US, ST = California, L = San Francisco, O = "Fastly, Inc", CN = r.ssl.fastly.net
verify return:1
CONNECTED(00000005)
---
Certificate chain
 0 s:/C=US/ST=California/L=San Francisco/O=Fastly, Inc/CN=r.ssl.fastly.net
   i:/C=BE/O=GlobalSign nv-sa/CN=GlobalSign CloudSSL CA - SHA256 - G3
 1 s:/C=BE/O=GlobalSign nv-sa/CN=GlobalSign CloudSSL CA - SHA256 - G3
   i:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIJuzCCCKOgAwIBAgIMIv4nxcJWdBF2KcUVMA0GCSqGSIb3DQEBCwUAMFcxCzAJ
BgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMS0wKwYDVQQDEyRH
bG9iYWxTaWduIENsb3VkU1NMIENBIC0gU0hBMjU2IC0gRzMwHhcNMjAwNzEzMTc0
NjExWhcNMjEwNDI4MTkyMDI1WjBrMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2Fs
aWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzEUMBIGA1UECgwLRmFzdGx5
LCBJbmMxGTAXBgNVBAMMEHIuc3NsLmZhc3RseS5uZXQwggEiMA0GCSqGSIb3DQEB
AQUAA4IBDwAwggEKAoIBAQDTciJwVUeYpeFv0YzWACjrrAg7Qy2yWqLNrGXTJu0m
0bWfeB9kA3gY3gny66LF6W/hYVXtf+oCneDWIpm7eO8DogP+k9H2uwOkCnEXOGog
Jj1QfWnlqYQSpK0HRZ8idm6EglJANXBqK/G+Nbnqb0P68MsdaTKLo1zHyRcEncbZ
OnWAgYkZ1s5CyNQmNhn741JrkXuEcLjuRi5oFP252w8qhcxLAzI9T7pfym9ERcvM
kwZUXUIv9z0qrU3HikASfL6TC2O1qfHwVd4RvR74WOdDHkS02AQWx3NpVbfBLI53
GM/f59vocj3z6cV5TmUcbgrvYt2Lm215mjIOefyzxqlxAgMBAAGjggZxMIIGbTAO
BgNVHQ8BAf8EBAMCBaAwgYoGCCsGAQUFBwEBBH4wfDBCBggrBgEFBQcwAoY2aHR0
cDovL3NlY3VyZS5nbG9iYWxzaWduLmNvbS9jYWNlcnQvY2xvdWRzc2xzaGEyZzMu
Y3J0MDYGCCsGAQUFBzABhipodHRwOi8vb2NzcDIuZ2xvYmFsc2lnbi5jb20vY2xv
dWRzc2xzaGEyZzMwVgYDVR0gBE8wTTBBBgkrBgEEAaAyARQwNDAyBggrBgEFBQcC
ARYmaHR0cHM6Ly93d3cuZ2xvYmFsc2lnbi5jb20vcmVwb3NpdG9yeS8wCAYGZ4EM
AQICMAkGA1UdEwQCMAAwggQBBgNVHREEggP4MIID9IIQci5zc2wuZmFzdGx5Lm5l
dIIMKi5hZHdlcnguY29tghEqLmFsaXR0bGVjcmFmdC5pdIITKi5hbGl0dGxlbWFy
a2V0LmNvbYIVKi5hbGl0dGxlbWVyY2VyaWUuY29tghAqLmNhdGNocG9pbnQuY29t
gggqLmNubi5pb4IVKi5kb2xsYXJzaGF2ZWNsdWIuY29tggsqLmVhdGVyLmNvbYIc
Ki5maWxlcy5zYXltZWRpYS1jb250ZW50LmNvbYIMKi5maW5uY2RuLm5vgggqLmZ0
LmNvbYIUKi5oaXBtdW5rc3RhZ2luZy5jb22CECouaG91c2Vsb2dpYy5jb22CEiou
bWVldHVwc3RhdGljLmNvbYINKi5uZXR6d2VsdC5kZYIJKi5uZmwuY29tggoqLnBh
Z2FyLm1lgg8qLnBpY21vbmtleS5jb22CCSoucHlwaS5pb4IKKi5weXBpLm9yZ4IS
Ki5weXRob25ob3N0ZWQub3Jngg4qLnJlYWxzZWxmLmNvbYIJKi5ydGJmLmJlgg4q
LnNibmF0aW9uLmNvbYILKi5zaGFrci5jb22CECouc3RhdGljLnJ0YmYuYmWCECou
c3RyZWFtYWJsZS5jb22CDCouc3VyZmx5LmNvbYIOKi50aGV2ZXJnZS5jb22CDyou
dGhyaWxsaXN0LmNvbYINKi52b3gtY2RuLmNvbYIJKi52b3guY29tgg4qLnZveG1l
ZGlhLmNvbYIMKi53ZXdvcmsuY29tggphZHdlcnguY29tgg9hbGl0dGxlY3JhZnQu
aXSCEWFsaXR0bGVtYXJrZXQuY29tghNhbGl0dGxlbWVyY2VyaWUuY29tghZhbHBo
YS5lbnRyZXByZW5ldXIuY29tggllYXRlci5jb22CEGVudHJlcHJlbmV1ci5jb22C
FGZhc3RseS5zaGlla2hkZXYuY29tggZmdC5jb22CFWgyLmhpcG11bmtzdGFnaW5n
LmNvbYIIaS5nc2UuaW+CC2xvc3RteS5uYW1lgg1waWNtb25rZXkuY29tghhwcmV2
aWV3LmVudHJlcHJlbmV1ci5jb22CEHB5dGhvbmhvc3RlZC5vcmeCEXFhLnNhZmFy
aWZsb3cuY29tggxyZWFsc2VsZi5jb22CB3J0YmYuYmWCFHN0YXRpYy53aXhzdGF0
aWMuY29tgg5zdHJlYW1hYmxlLmNvbYIKc3VyZmx5LmNvbYIMdGhldmVyZ2UuY29t
ggt2b3gtY2RuLmNvbYIHdm94LmNvbYIUd3d3LmVudHJlcHJlbmV1ci5jb22CDnd3
dy5qb3llbnQuY29tghV3d3cucWEuc2FmYXJpZmxvdy5jb20wHQYDVR0lBBYwFAYI
KwYBBQUHAwEGCCsGAQUFBwMCMB8GA1UdIwQYMBaAFKkrh+HOJEc7G7/PhTcCVZ0N
lFjmMB0GA1UdDgQWBBTxY+TFzJgw7IN9ivLLaqdlMf3mvzCCAQUGCisGAQQB1nkC
BAIEgfYEgfMA8QB2AO7Ale6NcmQPkuPDuRvHEqNpagl7S2oaFDjmR7LL7cX5AAAB
c0lI0J8AAAQDAEcwRQIhAJyhv/2T/cg+llhnp/yBWZONaTrnA1cPCY7GKBMNFImx
AiB0NUlpb4Ki7AyILBiecQ3xp0yaNDJ4+LOmjowS2wXZ8AB3APZclC/RdzAiFFQY
CDCUVo7jTRMZM7/fDC8gC8xO8WTjAAABc0lI0JMAAAQDAEgwRgIhANd3AjhosuGC
XDG/ZoLahmZL6cgS1JeHAU6gGedfaSxRAiEA+itmVtM5a/IdhDcpf0RYoivy3sSY
njCi2chBAtAgY5MwDQYJKoZIhvcNAQELBQADggEBAFXe/QXa9DIUZac9Aid+OYPj
MgAGPQ4q8swsJbV9VYueRNUzaqX2jOhhyj1dMxa4Fl3fXeDpkY8iY6VuR39at45l
9CHtIHT9NJDw7UtDbbzVKbwD5qXMnIEP3nbdPWcFcAkVgTphpQjdxz/y9ZgKyaCK
F2d1Btu5aHacd6ZUNKXgNlflArbixk6hDDdqNG+GTcNfL0r1WXk60HoGU6eBmxFb
Ydso4kC4jL1xwirleISteTDl/ffC/08XUdya29e+C4s7w0tG6BWdGiRExAYM7nqt
9n0+W6F4axUvOEpe0kapnu8JxAPQMY/dKrGowtq5cbINMc2ZsyYP23uzzIlN0xU=
-----END CERTIFICATE-----
subject=/C=US/ST=California/L=San Francisco/O=Fastly, Inc/CN=r.ssl.fastly.net
issuer=/C=BE/O=GlobalSign nv-sa/CN=GlobalSign CloudSSL CA - SHA256 - G3
---
No client certificate CA names sent
Server Temp Key: ECDH, X25519, 253 bits
---
SSL handshake has read 4286 bytes and written 293 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-GCM-SHA256
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES128-GCM-SHA256
    Session-ID: 921626F91CA3BDBA6F295EEEC3320DA74903BAA58E601AB808ECEFEA903F1F8E
    Session-ID-ctx: 
    Master-Key: FAA2BCDD2D968396445A7F7D0D1580EBE01506DC6CBCF18F72D4A1CAE932EFCC78894628C7344685CB85CDA9F1FEF36D
    TLS session ticket lifetime hint: 7200 (seconds)
    TLS session ticket:
    0000 - bf 22 e3 13 85 4e 84 47-b8 70 98 dc d2 12 a8 7b   ."...N.G.p.....{
    0010 - 02 a4 f7 e2 8c 9b 23 01-86 cb 41 f9 75 33 84 d7   ......#...A.u3..
    0020 - b4 f4 11 03 d6 c8 fe 11-e9 d1 c7 35 8c 6f 83 b9   ...........5.o..
    0030 - 2a 6f 61 e5 ac 2f 29 0f-58 4d c7 57 71 04 37 a6   *oa../).XM.Wq.7.
    0040 - f1 ef c0 a0 f9 01 2b a7-44 34 96 cf 5f e7 22 94   ......+.D4.._.".
    0050 - b6 dd ee 5c d2 7e a6 39-54 c9 dd f4 46 e5 58 1e   ...\.~.9T...F.X.
    0060 - ec 05 02 d6 98 98 da 9c-1b af fd 30 f4 17 fd 91   ...........0....
    0070 - 43 be c7 89 e3 ae 75 64-a1 52 b3 0e 67 e0 48 c6   C.....ud.R..g.H.
    0080 - 6c ab 9b d3 3b c3 c7 24-db 8c 1e 13 c6 88 b6 99   l...;..$........
    0090 - f0 30 4b 2a 75 c6 b9 4e-09 b0 d1 b0 af 18 b7 06   .0K*u..N........

    Start Time: 1595263240
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
---
DONE

IPv6 (If available)

echo -n | openssl s_client -6 -connect pypi.org:443
depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert High Assurance EV Root CA
verify return:1
depth=1 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert SHA2 Extended Validation Server CA
verify return:1
depth=0 businessCategory = Private Organization, jurisdictionCountryName = US, jurisdictionStateOrProvinceName = Delaware, serialNumber = 3359300, C = US, ST = New Hampshire, L = Wolfeboro, O = Python Software Foundation, CN = www.python.org
verify return:1
CONNECTED(00000005)
---
Certificate chain
 0 s:/businessCategory=Private Organization/jurisdictionCountryName=US/jurisdictionStateOrProvinceName=Delaware/serialNumber=3359300/C=US/ST=New Hampshire/L=Wolfeboro/O=Python Software Foundation/CN=www.python.org
   i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 Extended Validation Server CA
 1 s:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 Extended Validation Server CA
   i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert High Assurance EV Root CA
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIIczCCB1ugAwIBAgIQDl7PGBeDAG2brEU2EfVJEjANBgkqhkiG9w0BAQsFADB1
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMTQwMgYDVQQDEytEaWdpQ2VydCBTSEEyIEV4dGVuZGVk
IFZhbGlkYXRpb24gU2VydmVyIENBMB4XDTE4MDkxODAwMDAwMFoXDTIwMTAxNDEy
MDAwMFowgdgxHTAbBgNVBA8MFFByaXZhdGUgT3JnYW5pemF0aW9uMRMwEQYLKwYB
BAGCNzwCAQMTAlVTMRkwFwYLKwYBBAGCNzwCAQITCERlbGF3YXJlMRAwDgYDVQQF
EwczMzU5MzAwMQswCQYDVQQGEwJVUzEWMBQGA1UECBMNTmV3IEhhbXBzaGlyZTES
MBAGA1UEBxMJV29sZmVib3JvMSMwIQYDVQQKExpQeXRob24gU29mdHdhcmUgRm91
bmRhdGlvbjEXMBUGA1UEAxMOd3d3LnB5dGhvbi5vcmcwggEiMA0GCSqGSIb3DQEB
AQUAA4IBDwAwggEKAoIBAQD2roGTDc+m3g3mReIf7j5rzLovnk3Zggvy2kWWMnDB
Yz2m6sgxOL1pkzIu7YNe4noH7ZRym0OIQjZbDIleB7SOGAoD2BBv+Mv79HtedJ3d
vhXwmgRenlNxBxhDcaVLDONVC9Ir3Ft46uuGIrXnKB8L1KZV6h8IFC2G3GZXJtkw
EojXdmJFzuRrKMRi0cLPlF60upRISIj3jg9kK4D+f0xYrsQAJvK0veqRsNQ8bXPE
YR8kG4Paj7rOeh3FVGxrKOKNpoI+kV6EqOVIhJY698P7EbDLGjG2Im9P6VFmwXod
YAZ2CTFaMlrC0FljAO/FKeQKR29vitthLMutcd+AkoDDAgMBAAGjggSZMIIElTAf
BgNVHSMEGDAWgBQ901Cl1qCt7vNKYApl0yHU+PjWDzAdBgNVHQ4EFgQUUTsyHAXZ
y6d2HWn+8MZNUhBCkEwwggFCBgNVHREEggE5MIIBNYIOd3d3LnB5dGhvbi5vcmeC
D2RvY3MucHl0aG9uLm9yZ4IPYnVncy5weXRob24ub3Jngg93aWtpLnB5dGhvbi5v
cmeCDWhnLnB5dGhvbi5vcmeCD21haWwucHl0aG9uLm9yZ4IPcHlwaS5weXRob24u
b3JnghRwYWNrYWdpbmcucHl0aG9uLm9yZ4IQbG9naW4ucHl0aG9uLm9yZ4ISZGlz
Y3Vzcy5weXRob24ub3Jnggx1cy5weWNvbi5vcmeCB3B5cGkuaW+CDGRvY3MucHlw
aS5pb4IIcHlwaS5vcmeCDWRvY3MucHlwaS5vcmeCD2RvbmF0ZS5weXBpLm9yZ4IT
ZGV2Z3VpZGUucHl0aG9uLm9yZ4ITd3d3LmJ1Z3MucHl0aG9uLm9yZ4IKcHl0aG9u
Lm9yZzAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUF
BwMCMHUGA1UdHwRuMGwwNKAyoDCGLmh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9z
aGEyLWV2LXNlcnZlci1nMi5jcmwwNKAyoDCGLmh0dHA6Ly9jcmw0LmRpZ2ljZXJ0
LmNvbS9zaGEyLWV2LXNlcnZlci1nMi5jcmwwSwYDVR0gBEQwQjA3BglghkgBhv1s
AgEwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cuZGlnaWNlcnQuY29tL0NQUzAH
BgVngQwBATCBiAYIKwYBBQUHAQEEfDB6MCQGCCsGAQUFBzABhhhodHRwOi8vb2Nz
cC5kaWdpY2VydC5jb20wUgYIKwYBBQUHMAKGRmh0dHA6Ly9jYWNlcnRzLmRpZ2lj
ZXJ0LmNvbS9EaWdpQ2VydFNIQTJFeHRlbmRlZFZhbGlkYXRpb25TZXJ2ZXJDQS5j
cnQwDAYDVR0TAQH/BAIwADCCAX8GCisGAQQB1nkCBAIEggFvBIIBawFpAHcA7ku9
t3XOYLrhQmkfq+GeZqMPfl+wctiDAMR7iXqo/csAAAFl7l3MWwAABAMASDBGAiEA
qfAJSfOHG4r8YvzTkZsr8cEXFcnFIns40+JXVdgY0vsCIQCvnB+YExtMRQVQXONc
glOTsIYmNgYPrtyHYsTj/Xua5QB3AFYUBpov18Ls0/XhvUSyPsdGdrm8mRFcwO+U
mFXWidDdAAABZe5dzHoAAAQDAEgwRgIhAIF6xXakKVdREciK8aM2z1c71eiU8qF/
UCZbl4sEfLTQAiEA870pR9Hazod3FgZszr9itk8sYPLoQjV9/WENl0HXXGwAdQC7
2d+8H4pxtZOUI5eqkntHOFeVCqtS6BqQlmQ2jh7RhQAAAWXuXcwzAAAEAwBGMEQC
IAeIvcaqPATJrCo3+ceBlVbsyPJcDPM7QGLpaRPFBduQAiBHNfcsBLaelS9bUmfU
R0VjJLoTA39AJAj8oU6iAzruHDANBgkqhkiG9w0BAQsFAAOCAQEAwH5+PXougfo5
qMVIE65Dei/CEb4ahZfoMvvlJRvuNAI/ARWYQSHh6IKXdxFxIE5hCC/NNtdAcc1p
CoZ2+IM/x0cGBjHZegSjhXfQy+w7twfgyeTSNalV2jzKQ0Yv/JvfI9qiMdhEQbfL
qaQ6Nj/js8uvQqWf6w8yo7hAzKs1jTF7Wy/cM0lvqNocDWYROhAVcI+jSMKwlcLv
75xAbOZqw2D483mkQizVj7wQ1fYP3Tr0wfvFNeoIAPUXLrEHiEmHWA0h+U9KEgVf
VQ3PvzItecKWFI+0d9RpNupc1HdipBCySvnNa1LcG2AviYXpIsbo8EBvbj0HcEVx
7NEANHNX2g==
-----END CERTIFICATE-----
subject=/businessCategory=Private Organization/jurisdictionCountryName=US/jurisdictionStateOrProvinceName=Delaware/serialNumber=3359300/C=US/ST=New Hampshire/L=Wolfeboro/O=Python Software Foundation/CN=www.python.org
issuer=/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 Extended Validation Server CA
---
No client certificate CA names sent
Server Temp Key: ECDH, X25519, 253 bits
---
SSL handshake has read 4001 bytes and written 293 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-GCM-SHA256
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES128-GCM-SHA256
    Session-ID: C5941135698DD436E54D41359DD2F4CEB31B23D5BCBDBE2C2ED84FD96A22F168
    Session-ID-ctx: 
    Master-Key: 73B93158FCF3F846AE17E1D85F19B3B5BCB1737519465F59463C89E51327469F315B91D9F132D9E65DB6916E8A541EC0
    TLS session ticket lifetime hint: 7200 (seconds)
    TLS session ticket:
    0000 - bf 22 e3 13 85 4e 84 47-b8 70 98 dc d2 12 a8 7b   ."...N.G.p.....{
    0010 - 2c 17 b3 8d da 42 e6 56-ce 52 24 13 10 5c 18 59   ,....B.V.R$..\.Y
    0020 - 23 e9 3f 24 4c be 2c 28-69 79 97 27 b6 69 4a 4f   #.?$L.,(iy.'.iJO
    0030 - ab cd 86 83 14 20 e5 10-61 5b f2 c5 31 77 2b e5   ..... ..a[..1w+.
    0040 - 64 0b 78 14 92 16 17 75-2c 06 24 59 03 3f 49 1f   d.x....u,.$Y.?I.
    0050 - 5c aa af 3d f6 94 4f 5c-27 30 a6 59 20 e9 fa 5f   \..=..O\'0.Y .._
    0060 - 6a b0 9f 5c 03 c8 5e 75-7e 03 2b b1 71 b1 bb 15   j..\..^u~.+.q...
    0070 - c8 f4 a3 70 0e 0c 87 83-ea 07 7e 51 c0 9b 3f ef   ...p......~Q..?.
    0080 - 4c b5 70 c9 7c 10 6d bf-8c 92 08 71 9a 2d 77 29   L.p.|.m....q.-w)
    0090 - 79 8a b8 dd 38 03 dc ef-76 3a a6 21 32 9a aa da   y...8...v:.!2...

    Start Time: 1595263305
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
---
DONE
echo -n | openssl s_client -6 -connect files.pythonhosted.org:443
read:errno=32
CONNECTED(00000005)
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 0 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : 0000
    Session-ID: 
    Session-ID-ctx: 
    Master-Key: 
    Start Time: 1595263598
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
---

Metadata

Metadata

Assignees

No one assigned

    Labels

    networkIssues related to our CDN, users having problems connecting to PyPI

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions