ฉันสามารถผลักดันด้วยโครงการโคลนโดยใช้ ssh แต่มันไม่ทำงานเมื่อฉันโคลนโครงการด้วย https
ข้อความแสดงข้อผิดพลาดที่แสดงให้ฉันทราบคือ:
server certificate verification failed. CAfile: /etc/ssl/certs/cacertificates.crt CRLfile: none
ฉันสามารถผลักดันด้วยโครงการโคลนโดยใช้ ssh แต่มันไม่ทำงานเมื่อฉันโคลนโครงการด้วย https
ข้อความแสดงข้อผิดพลาดที่แสดงให้ฉันทราบคือ:
server certificate verification failed. CAfile: /etc/ssl/certs/cacertificates.crt CRLfile: none
คำตอบ:
TLDR:
hostname=XXX
port=443
trust_cert_file_location=`curl-config --ca`
sudo bash -c "echo -n | openssl s_client -showcerts -connect $hostname:$port -servername $hostname \
2>/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' \
>> $trust_cert_file_location"
คำตอบที่ยาว
เหตุผลพื้นฐานคือการที่เครื่องคอมพิวเตอร์ของคุณไม่เชื่อถือผู้ออกใบรับรองว่าได้ลงนามในใบรับรองที่ใช้บนเซิร์ฟเวอร์ Gitlab นี่ไม่ได้หมายความว่าใบรับรองนั้นน่าสงสัย แต่อาจเป็นการลงนามด้วยตนเองหรือลงนามโดยสถาบัน / บริษัท ที่ไม่ได้อยู่ในรายชื่อ CA ของระบบปฏิบัติการของคุณ สิ่งที่คุณต้องทำเพื่อหลีกเลี่ยงปัญหาที่เกิดขึ้นกับคอมพิวเตอร์ของคุณกำลังบอกให้เชื่อถือใบรับรองนั้น - หากคุณไม่มีเหตุผลใด ๆ ที่ต้องสงสัยเกี่ยวกับมัน
คุณต้องตรวจสอบใบรับรองเว็บที่ใช้สำหรับเซิร์ฟเวอร์ gitLab </git_installation_folder>/bin/curl-ca-bundle.crt
ของคุณและเพิ่มเข้าไปในของคุณ
หากต้องการตรวจสอบว่าอย่างน้อยโคลนทำงานโดยไม่ตรวจสอบใบรับรองดังกล่าวคุณสามารถตั้งค่า:
export GIT_SSL_NO_VERIFY=1
#or
git config --global http.sslverify false
แต่นั่นจะเป็นการทดสอบเท่านั้นดังที่แสดงใน " SSL ใช้งานได้กับเบราว์เซอร์ wget และ curl แต่ล้มเหลวด้วย git " หรือในโพสต์บล็อกนี้
ตรวจสอบการตั้ง GitLab ของคุณในปัญหา 4272
ในการรับใบรับรองนั้น (ซึ่งคุณจะต้องเพิ่มลงในcurl-ca-bundle.crt
ไฟล์ของคุณ) ให้พิมพ์ a:
echo -n | openssl s_client -showcerts -connect yourserver.com:YourHttpsGitlabPort \
2>/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'
(โดยที่ ' yourserver.com
' เป็นชื่อเซิร์ฟเวอร์ GitLab ของคุณและYourHttpsGitlabPort
เป็นพอร์ต https ปกติ443
)
ในการตรวจสอบ CA (ผู้ออกใบรับรอง) ให้พิมพ์:
echo -n | openssl s_client -showcerts -connect yourserver.com:YourHttpsGilabPort \
2>/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' \
| openssl x509 -noout -text | grep "CA Issuers" | head -1
หมายเหตุ: Valeriy Katkovแนะนำในข้อคิดเห็นเพื่อเพิ่ม-servername
ตัวเลือกคำสั่ง openssl มิฉะนั้นคำสั่งจะไม่แสดงใบรับรองสำหรับ www.github.com ในกรณีของ Valeriy
openssl s_client -showcerts -servername www.github.com -connect www.github.com:443
Findekanoเพิ่มในความคิดเห็น :
เพื่อระบุตำแหน่งของ
curl-ca-bundle.crt
คุณสามารถใช้คำสั่ง
curl-config --ca
โปรดดูคำตอบล่าสุดของฉัน " github: การตรวจสอบใบรับรองเซิร์ฟเวอร์ล้มเหลว ": คุณอาจต้องยกเลิกใบรับรองเหล่านั้นทั้งหมด:
sudo apt-get install --reinstall ca-certificates
sudo mkdir /usr/local/share/ca-certificates/cacert.org
sudo wget -P /usr/local/share/ca-certificates/cacert.org http://www.cacert.org/certs/root.crt http://www.cacert.org/certs/class3.crt
sudo update-ca-certificates
git config --global http.sslCAinfo /etc/ssl/certs/ca-certificates.crt
which git
ที่คุณสามารถทำได้
curl-config --ca
แต่ไม่มีอะไรกลับมา
หมายเหตุ:นี้มีที่สำคัญผลกระทบการรักษาความปลอดภัย
เปิดเทอร์มินัลของคุณและเรียกใช้คำสั่งต่อไปนี้:
export GIT_SSL_NO_VERIFY=1
มันทำงานได้สำหรับฉันและฉันใช้ระบบ Linux
git config --global http.sslverify false
สาเหตุอื่นของปัญหานี้อาจเป็นเพราะนาฬิกาของคุณอาจถูกปิด ใบรับรองมีความไวต่อเวลา
วิธีตรวจสอบเวลาของระบบปัจจุบัน:
date -R
คุณอาจพิจารณาติดตั้งNTPโดยอัตโนมัติซิงค์เวลาของระบบที่มี timeservers อินเทอร์เน็ตที่เชื่อถือได้จากสระว่ายน้ำ NTP ทั่วโลก ตัวอย่างเช่นการติดตั้งบน Debian / Ubuntu:
apt-get install ntp
git
ต่อการแลกเปลี่ยน SSL พื้นฐาน Git สร้างขึ้นด้วยการรองรับ SSL
หากคุณกำลังใช้เซิร์ฟเวอร์ git ภายในเครือข่ายส่วนตัวและกำลังใช้ใบรับรองที่ลงนามด้วยตนเองหรือใบรับรองผ่านที่อยู่ IP คุณสามารถใช้ git global config เพื่อปิดการใช้งานการตรวจสอบ ssl:
git config --global http.sslverify "false"
มีปัญหาเดียวกัน เกิดจากผู้ออกใบรับรองด้วยตนเอง แก้ไขได้โดยการเพิ่มไฟล์. pem ไปยัง/ usr / local / share / ca-certificate / และการโทร
sudo update-ca-certificates
PS: ไฟล์ pem ในโฟลเดอร์. / แชร์ /ca-certificates ต้องมีนามสกุล. crt
ตรวจสอบนาฬิการะบบของคุณ
$ date
หากไม่ถูกต้องการตรวจสอบใบรับรองจะล้มเหลว เพื่อแก้ไขนาฬิการะบบ
$ apt-get install ntp
นาฬิกาควรซิงโครไนซ์ตัวเอง
ในที่สุดป้อนคำสั่ง clone อีกครั้ง
หรือเพียงแค่เรียกใช้ความคิดเห็นนี้เพื่อเพิ่มใบรับรองเซิร์ฟเวอร์ในฐานข้อมูลของคุณ:
echo $(echo -n | openssl s_client -showcerts -connect yourserver.com:YourHttpGilabPort 2>/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p') >> /etc/ssl/certs/ca-certificates.crt
จากนั้นทำการคอมไพล์อีกครั้ง
ฉันทำกับไฟล์ CA ของฉันในขณะที่ตั้งค่าพร็อกซี goagent ไม่สามารถดึงข้อมูลจาก GitHub และรับคำเตือนที่เหมือนกัน:
การตรวจสอบใบรับรองเซิร์ฟเวอร์ล้มเหลว CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none
ใช้วิธีการของ Vonc รับใบรับรองจาก github และใส่ลงใน /etc/ssl/certs/ca-certificates.crt แก้ไขปัญหา
echo -n | openssl s_client -showcerts -connect github.com:443 2> / dev / null | sed -ne '/ - เริ่มต้นใบรับรอง - /, / - ใบรับรองสิ้นสุด - / p'
ไม่จำเป็นต้องตั้งค่าการตรวจสอบ git ssl เป็นตั้งค่าเป็นเท็จ มันเกิดขึ้นเมื่อระบบไม่มีใบรับรอง CA ทั้งหมด คนส่วนใหญ่ที่มีใบรับรอง SSL ของแท้ไม่มีใบรับรองระดับกลาง
เพียงแค่เพิ่มข้อความฉบับสมบูรณ์ของใบรับรองระดับกลาง (ทั้งเชนของ CA ที่ขาดหายไปและใบรับรองระดับกลาง) ไปที่
sudo gedit /etc/ssl/certs/ca-certificates.crt
update-ca-certificates
ทำงานโดยไม่มีการเรียกใช้
กันไปสำหรับใบรับรองที่สร้างขึ้นด้วยตนเองเพียงแค่เพิ่มข้อความใบรับรอง CA
ในตอนท้าย: กดสำเร็จ: ทุกอย่างเป็นปัจจุบัน
สิ่งที่ฉันทำเพื่อแก้ไขปัญหานี้ใน terminal (Ubuntu 18.04):
openssl s_client -showcerts -servername www.github.com -connect www.github.com:443
ฉันได้รับใบรับรองสองชิ้น /etc/ssl/certs/ca-certificates.crt
และฉันคัดลอกชิ้นใบรับรองไปยังแฟ้มใบรับรองของฉันไป
---BEGIN CERTIFICATE---
และ--- END CERTIFICATE ---
?
ฉันติดตั้ง Xubuntu บน Raspberry pi 2 พบปัญหาเดียวกันกับเวลาเนื่องจาก NTP และการซิงค์เซิร์ฟเวอร์อัตโนมัติถูกปิด (หรือไม่ได้ติดตั้ง) รับ NTP
sudo apt-get install ntp
และเปลี่ยน "เวลาและวันที่" จาก "คู่มือ" เป็น "ทำให้ตรงกับเซิร์ฟเวอร์อินเทอร์เน็ต"
ในที่สุดเพิ่ม http.sslverify ใน. git / config ของคุณ
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = https://server/user/project.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
[http]
sslVerify = false
git config http.sslVerify false
ดีกว่าที่จะใช้บรรทัดคำสั่ง คุณแนะนำให้แก้ไขการตั้งค่า Git บนพื้นฐานพื้นที่เก็บข้อมูลไม่ใช่ทั่วโลกตามที่แนะนำโดย @ romain-vdk?
สิ่งแรกที่คุณควรตรวจสอบเป็นสิทธิ์ในแฟ้มของและ/etc/ssl
/etc/ssl/certs
ฉันทำผิดพลาดของการวางสิทธิ์ของแฟ้ม (หรือเป่าไป SSL ที่rm -rf /etc/ssl/*
ไดเรกทอรี) เมื่อใช้ssl-cert
ชื่อกลุ่ม / ID ในขณะที่ทำงานบนของเครื่องมือการจัดการใบรับรอง
ตอนนั้นเองที่ผมสังเกตเห็นข้อผิดพลาดเดียวกันที่แน่นอนสำหรับการwget
และcurl
เครื่องมือเบราว์เซอร์ CLI:
server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none
เมื่อฉันนำไฟล์ไปยังไดเรกทอรี/etc/ssl
และ/etc/ssl/cert
ไดเรกทอรีo+rx-w
เครื่องมือเบราว์เซอร์ CLI เหล่านั้นเริ่มหายใจง่ายขึ้น:
mkdir -p /etc/ssl/certs
chmod u+rwx,go+rx /etc/ssl /etc/ssl/certs
ฉันต้องสร้างไดเรกทอรีย่อย Java อีกครั้งและสร้างไดเรกทอรีใบรับรอง CA ที่เชื่อถือได้ใหม่:
mkdir /etc/ssl/certs/java
chmod u+rwx,go+rx /etc/ssl/certs/java
update-ca-certificates
และชายฝั่งก็ชัดเจน
ฉันเพิ่งพบปัญหาเดียวกันกับที่เก็บ git ซึ่งใช้ได้กับฉันเสมอ ปัญหาคือว่าฉันเข้าถึงผ่านการเข้าถึง WiFi สาธารณะซึ่งเปลี่ยนเส้นทางไปยังพอร์ทัลเชลยเมื่อเชื่อมต่อครั้งแรก (ตัวอย่างเช่นเพื่อแสดงโฆษณาและเห็นด้วยกับ tos)
ให้คัดลอกใบรับรองและบันเดิลในไฟล์. crt ไฟล์เดียวและตรวจสอบให้แน่ใจว่ามีบรรทัดว่างระหว่างใบรับรองในไฟล์
สิ่งนี้ใช้ได้กับฉันบนเซิร์ฟเวอร์ GitLab หลังจากลองทุกอย่างบนอินเทอร์เน็ต
curl-config --ca
กลับมา/etc/ssl/certs/ca-certificates.crt
ซึ่งเป็นที่ที่ฉันต้องเพิ่มใบรับรอง นอกจากนั้นคำตอบนี้เป็นข้อมูลแรกที่ชี้ให้ฉันในทิศทางที่ถูกต้องกับปัญหานี้