Git
openssl 沒有找到任何證書
當我使用 git 或 curl 時,我收到一個可能與證書有關的錯誤:
使用 git:
> git clone https://github.com/vim/vim.git Cloning into 'vim'... fatal: unable to access 'https://github.com/vim/vim.git/': error:140943E8:SSL routines:ssl3_read_bytes:reason(1000)
捲曲
> curl -v https://github.com * Trying 2001:8002:e42:f002::f5ff:443... * TCP_NODELAY set * Connected to github.com (2001:8002:e42:f002::f5ff) port 443 (#0) * ALPN, offering h2 * ALPN, offering http/1.1 * successfully set certificate verify locations: * CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath: none * TLSv1.3 (OUT), TLS handshake, Client hello (1): * TLSv1.3 (IN), TLS alert, close notify (512): * error:140943E8:SSL routines:ssl3_read_bytes:reason(1000) * Closing connection 0 curl: (35) error:140943E8:SSL routines:ssl3_read_bytes:reason(1000)
如果我嘗試查看 openssl 發生了什麼,它似乎找不到任何證書:
> openssl s_client -ciphersuites TLS_AES_128_GCM_SHA256 -connect github.com:443 CONNECTED(00000003) 139703172380480:error:140943E8:SSL routines:ssl3_read_bytes:reason(1000):ssl/record/rec_layer_s3.c:1543:SSL alert number 0 --- no peer certificate available --- No client certificate CA names sent --- SSL handshake has read 7 bytes and written 316 bytes Verification: OK --- New, (NONE), Cipher is (NONE) Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE No ALPN negotiated Early data was not sent Verify return code: 0 (ok) ---
當我在另一台機器上執行 openssl 命令(上圖)時,它會返回大量關於證書的資訊。
我可以做些什麼來診斷/解決這個問題?
我正在使用 Fedora 31
編輯:“nmcli con show”的部分輸出是:
ipv6.method: auto ipv6.dns: -- ipv6.dns-search: -- ipv6.dns-options: -- ipv6.dns-priority: 0 ipv6.addresses: -- ipv6.gateway: -- ipv6.routes: -- ipv6.route-metric: -1 ipv6.route-table: 0 (unspec) ipv6.routing-rules: -- ipv6.ignore-auto-routes: no ipv6.ignore-auto-dns: no ipv6.never-default: no ipv6.may-fail: yes ipv6.ip6-privacy: -1 (unknown) ipv6.addr-gen-mode: stable-privacy ipv6.dhcp-duid: -- ipv6.dhcp-send-hostname: yes ipv6.dhcp-hostname: -- ipv6.token: --
您顯然設置了不正確的 IPv6 配置。作為一種解決方法(不是修復,但可能很複雜或不可能),請在電腦上完全禁用 IPv6,然後
git
重試該命令。通過鍵入(以 root 身份)禁用 IPv6:
echo 0 > /proc/sys/net/ipv6/conf/all/autoconf echo 0 > /proc/sys/net/ipv6/conf/all/accept_ra echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6
這將在下次重新啟動之前有效。為了在您的電腦上永久禁用 IPv6(當然,直到您撤消它),您需要更改配置文件。遺憾的是,如何做到這一點在很大程度上取決於您的系統。在 Fedora 下,這可以通過編輯您的網路的配置文件來完成,該文件位於
/etc/sysconfig/network-scripts
並帶有您的乙太網網路的名稱,可能類似於ifcfg-enp4s2
如果您的網路(參見 參考資料ip a
)被呼叫enp4s2
。請添加(或編輯,如果它存在並且是=yes
)該行IPV6INIT=no
這將從下一次重新啟動網路服務(或重新啟動)開始生效。
在您的系統上可能會或可能不會起作用的另一種方法是找到文件
/etc/sysctl.conf
並添加這些行(或者如果它們存在則調整它們):net.ipv6.conf.all.autoconf = 0 net.ipv6.conf.all.accept_ra = 0 net.ipv6.conf.all.disable_ipv6 = 1
讓我們知道。
完全披露:禁用 IPv6 的行從How can I disable IPv6 in custom built embedded setup複製。