ฉันจะทำให้ git ยอมรับใบรับรองที่ลงชื่อด้วยตนเองได้อย่างไร


648

การใช้ Git มีวิธีบอกให้ยอมรับใบรับรองที่ลงนามด้วยตนเองหรือไม่

ฉันกำลังใช้เซิร์ฟเวอร์ https เพื่อโฮสต์เซิร์ฟเวอร์ git แต่ตอนนี้ใบรับรองลงชื่อด้วยตนเอง

เมื่อฉันพยายามสร้าง repo ที่นั่นเป็นครั้งแรก:

git push origin master -f

ฉันได้รับข้อผิดพลาด:

error: Cannot access URL     
https://the server/git.aspx/PocketReferences/, return code 22

fatal: git-http-push failed

4
คุณจะรู้ได้อย่างไรว่าปัญหาคือใบรับรอง
แอมเบอร์

1
จากพีซีแทนเครื่องมือ Git ของผู้ใช้อื่นให้พวกเขาเพิกเฉยต่อใบรับรองและใช้งานได้ จาก Mac ฉันไม่สามารถหาวิธีเพิกเฉยได้
Ian Vink

ข้อผิดพลาดที่ฉันได้รับด้วย git 2.1.1: "ร้ายแรง: ไม่สามารถเข้าถึง 'https: //.../project.git/': ปัญหาใบรับรอง SSL: ใบรับรองที่ลงชื่อด้วยตนเองในห่วงโซ่ใบรับรอง"
Stan Kurdziel

บน OSX / macintosh ดูเหมือนว่า git จะไม่ใช้sslcainfoตัวเลือก หากคุณสามารถใช้curl --cacertเพื่อดึงเส้นทาง repo ของคุณได้สำเร็จแต่คอมไพล์ไม่ทำงานคุณควรเพิ่มใบรับรองลงในโปรแกรมพวงกุญแจ OSX ที่ลึกลับ เพิ่มเติมได้ที่นี่superuser.com/questions/605900/…
amwinter

ฉันพบว่าเอกสารนี้มีประโยชน์gist.github.com/evantoli/f8c23a37eb3558ab8765
Mofaggol Hoshen

คำตอบ:


1168

หากต้องการยอมรับใบรับรองเฉพาะอย่างถาวร

ลองหรือhttp.sslCAPath คำตอบของ Adam Spiresให้ตัวอย่างที่ดี นี่เป็นทางออกที่ปลอดภัยที่สุดสำหรับคำถามhttp.sslCAInfo

หากต้องการปิดใช้งานการตรวจสอบ TLS / SSL สำหรับคำสั่ง git เดียว

ลองส่งผ่าน-cไปยังgitตัวแปรกำหนดค่าที่เหมาะสมหรือใช้คำตอบของ Flow :

git -c http.sslVerify=false clone https://example.com/path/to/git

หากต้องการปิดใช้งานการตรวจสอบ SSL สำหรับที่เก็บเฉพาะ

หากพื้นที่เก็บข้อมูลอยู่ภายใต้การควบคุมของคุณอย่างสมบูรณ์คุณสามารถลอง:

git config --global http.sslVerify false

มีค่อนข้างน้อยเลือกการกำหนดค่า SSL gitในการเป็น จากหน้าคนของgit config:

http.sslVerify
    Whether to verify the SSL certificate when fetching or pushing over HTTPS.
    Can be overridden by the GIT_SSL_NO_VERIFY environment variable.

http.sslCAInfo
    File containing the certificates to verify the peer with when fetching or pushing
    over HTTPS. Can be overridden by the GIT_SSL_CAINFO environment variable.

http.sslCAPath
    Path containing files with the CA certificates to verify the peer with when
    fetching or pushing over HTTPS.
    Can be overridden by the GIT_SSL_CAPATH environment variable.

ตัวเลือกการกำหนดค่า SSL ที่มีประโยชน์อื่น ๆ :

http.sslCert
    File containing the SSL certificate when fetching or pushing over HTTPS.
    Can be overridden by the GIT_SSL_CERT environment variable.

http.sslKey
    File containing the SSL private key when fetching or pushing over HTTPS.
    Can be overridden by the GIT_SSL_KEY environment variable.

http.sslCertPasswordProtected
    Enable git's password prompt for the SSL certificate. Otherwise OpenSSL will
    prompt the user, possibly many times, if the certificate or private key is encrypted.
    Can be overridden by the GIT_SSL_CERT_PASSWORD_PROTECTED environment variable.

40
'git config --global http.sslVerify false' ได้ทำการหลอกลวง ขอบคุณ!
Chris Story

110
คุณควรจะไม่เคยปิดการใช้งานทั่วโลก TLS (/ SSL) ใบรับรองการตรวจสอบ
ไหล

4
@ กระแส - ฉันเห็นด้วยอย่างสมบูรณ์ ฉันได้แก้ไขคำตอบนี้ (ตอนนี้ค่อนข้างเก่า) เพื่อพูดถกเถียงเพิ่มเติมเกี่ยวกับการปิดใช้งานการตรวจสอบใบรับรอง TLS / SSL
คริสโตเฟอร์

8
สำหรับฉันแล้วนี่เป็นการgit -c http.sslVerify=false clone https://domain.com/path/to/gitแก้ปัญหาของฉันขอบคุณ ...
Fernando Gomes

2
@Flow หากเราอยู่ในสภาพแวดล้อมการทำงานที่นายจ้างของเราเป็น MITMจะมีทางเลือกอะไรอีกในการปิดใช้งาน TLS / SSL ทั่วโลก
Stevoisiak

165

คุณสามารถตั้งค่าGIT_SSL_NO_VERIFYเป็นtrue:

GIT_SSL_NO_VERIFY=true git clone https://example.com/path/to/git

หรืออีกวิธีกำหนดค่า Git ไม่ให้ตรวจสอบการเชื่อมต่อบนบรรทัดคำสั่ง:

git -c http.sslVerify=false clone https://example.com/path/to/git

โปรดทราบว่าถ้าคุณไม่ได้ตรวจสอบใบรับรอง SSL / TLS แล้วคุณมีความอ่อนไหวต่อการโจมตี MITM


2
คุณยังสามารถใช้การ-cตั้งค่าสถานะgitเพื่อแก้ไขค่าการตั้งค่าสำหรับคำสั่งเดียว ฉันคิดว่าไวยากรณ์นี้สะอาดกว่า
คริสโตเฟอร์

1
อ่าฉันไม่รู้เรื่อง-cคอมไพล์ จริง ๆ แล้วฉันคิดว่ามันเป็นโซลูชันที่สะอาดกว่าแทนที่จะสร้างมลภาวะต่อสิ่งแวดล้อม :)
ไหล

1
@SkylarSaveland หมายเหตุที่git -c http.sslVerify=false <gitSubCommand>สามารถทำงานผ่านตัวกลางได้
Flow

1
ฉันควรจะสังเกตว่าวิธีนี้จะเปิดให้คุณสำหรับการโจมตีคนในกลาง
omikron

2
คำตอบจะอธิบายเพียงตัวเลือกที่ปลอดภัยที่สุดเท่านั้น
cp.engr

139

ฉันไม่ใช่แฟนตัวยงของคำตอบที่มีอยู่[แก้ไข: เวอร์ชันดั้งเดิม]เนื่องจากการปิดใช้งานการตรวจสอบความปลอดภัยควรเป็นวิธีสุดท้ายไม่ใช่วิธีแรกที่เสนอ แม้ว่าคุณจะไม่สามารถเชื่อถือใบรับรองที่ลงนามด้วยตนเองในการรับครั้งแรกโดยไม่ต้องมีวิธีการตรวจสอบเพิ่มเติม แต่การใช้ใบรับรองสำหรับgitการดำเนินการในภายหลังอย่างน้อยก็ทำให้ชีวิตยากขึ้นสำหรับการโจมตีที่เกิดขึ้นหลังจากคุณดาวน์โหลดใบรับรอง กล่าวอีกนัยหนึ่งถ้าใบรับรองที่คุณดาวน์โหลดเป็นของแท้แสดงว่าคุณดีตั้งแต่นั้นเป็นต้นไป ในทางตรงกันข้ามถ้าคุณปิดการใช้งานเพียงแค่การยืนยันแล้วคุณจะเปิดกว้างกับชนิดของมนุษย์ในกลางการโจมตีใด ๆที่จุดใด

เพื่อให้ตัวอย่างที่เฉพาะเจาะจง: ที่มีชื่อเสียงrepo.or.czพื้นที่เก็บข้อมูลให้ใบรับรองลงนามด้วยตนเอง ฉันสามารถดาวน์โหลดไฟล์นั้นวางไว้ที่อื่น/etc/ssl/certsแล้วทำ:

# Initial clone
GIT_SSL_CAINFO=/etc/ssl/certs/rorcz_root_cert.pem \
    git clone https://repo.or.cz/org-mode.git

# Ensure all future interactions with origin remote also work
cd org-mode
git config http.sslCAInfo /etc/ssl/certs/rorcz_root_cert.pem

โปรดทราบว่าการใช้โลคัลgit configที่นี่ (เช่นไม่มี--global) หมายความว่าใบรับรองที่ลงนามด้วยตนเองนี้เชื่อถือได้สำหรับที่เก็บเฉพาะนี้ซึ่งดี นอกจากนี้ยังใช้งานได้ดีกว่าการใช้งานGIT_SSL_CAPATHเนื่องจากช่วยลดความเสี่ยงในgitการตรวจสอบผ่านหน่วยงานออกใบรับรองอื่นที่อาจถูกบุกรุก


3
http.sslCAPath บังเอิญใช้ ssl_capath ตรรกะของ libcurl ฉันคิดว่าคุณสามารถเก็บจำนวน certs ได้ใน/etc/ssl/certs/ไดเรกทอรีและมันก็จะเรียงลำดับทุกอย่างที่คุณต้องการได้อย่างมีประสิทธิภาพ ฉันยังไม่ได้ทดสอบสิ่งนี้ใจคุณ แต่อาจอนุญาตให้คุณใช้ a --globalกับ certs ทั้งหมด อย่างไรก็ตามการทดสอบที่คุ้มค่า
Christopher

6
เมื่อพิจารณาจากความเสี่ยงของการปิดการใช้งานการตรวจสอบ SSL โดยสิ้นเชิงและความจริงคำถามก็คือ "วิธีการที่ฉันสามารถทำให้คอมไพล์ยอมรับใบรับรอง self ลงนาม?" นี้ควรจะเป็นคำตอบที่ได้รับการยอมรับ
PLNech

5
ในโลกอุดมคติมีบางสิ่งที่เหมือนกันgit config http.validCertFingerprint <base64-encoded-hash-of-certifcate>
Flow

1
คำตอบเดียวบนอินเทอร์เน็ตที่ใช้งานได้จริงกับสถานการณ์ของฉัน นั่นเป็นห้องสมุดนักแต่งเพลงส่วนตัว VCS ซึ่งโฮสต์บน Gitlab ที่โฮสต์ด้วยตนเองผ่าน SSL ที่ฉันต้องการในโครงการเวอร์ชันโดย git
Dejv

1
จากโคลนสด สิ่งนี้สามารถทำได้ในบรรทัดเดียว: git clone --config http.sslCAInfo=<path_to_cert> https://repo.or.cz/org-mode.git(ไม่จำเป็นต้องเรียกคำสั่ง 'git config' หลังจากนั้น)
แอรอน

39

การกำหนดค่าใบรับรองที่ลงนามเอง Git

TL; DR

ไม่ปิดการใช้งานการตรวจสอบ SSL ทั้งหมด!

สิ่งนี้สร้างวัฒนธรรมความปลอดภัยที่ไม่ดี อย่าเป็นคนนั้น

คีย์การกำหนดค่าที่คุณอยู่หลังจากนั้นคือ:

  • http.sslverify- จริงเสมอ ดูหมายเหตุข้างต้น

สิ่งเหล่านี้ใช้สำหรับการกำหนดค่าใบรับรองโฮสต์ที่คุณเชื่อถือ

ใช้สำหรับกำหนดค่าใบรับรองของคุณเพื่อตอบสนองต่อความท้าทาย SSL

เลือกใช้การตั้งค่าด้านบนกับโฮสต์ที่ระบุ

ส่วนกลาง.gitconfigสำหรับผู้ออกใบรับรองที่ลงชื่อด้วยตนเอง

sslVerifyเพื่อประโยชน์ของตัวเองและเพื่อนร่วมงานของฉันนี่คือวิธีที่เราจัดการเพื่อให้ได้ใบรับรองตนเองลงนามในการทำงานโดยไม่ต้องปิดการใช้งาน แก้ไขของคุณ.gitconfigเพื่อใช้git config --global -eเพิ่มสิ่งเหล่านี้:

# Specify the scheme and host as a 'context' that only these settings apply
# Must use Git v1.8.5+ for these contexts to work
[credential "https://your.domain.com"]
  username = user.name

  # Uncomment the credential helper that applies to your platform
  # Windows
  # helper = manager

  # OSX
  # helper = osxkeychain

  # Linux (in-memory credential helper)
  # helper = cache

  # Linux (permanent storage credential helper)
  # https://askubuntu.com/a/776335/491772

# Specify the scheme and host as a 'context' that only these settings apply 
# Must use Git v1.8.5+ for these contexts to work
[http "https://your.domain.com"]
  ##################################
  # Self Signed Server Certificate #
  ##################################

  # MUST be PEM format
  # Some situations require both the CAPath AND CAInfo 
  sslCAInfo = /path/to/selfCA/self-signed-certificate.crt
  sslCAPath = /path/to/selfCA/
  sslVerify = true

  ###########################################
  # Private Key and Certificate information #
  ###########################################

  # Must be PEM format and include BEGIN CERTIFICATE / END CERTIFICATE, 
  # not just the BEGIN PRIVATE KEY / END PRIVATE KEY for Git to recognise it.
  sslCert = /path/to/privatekey/myprivatecert.pem

  # Even if your PEM file is password protected, set this to false.
  # Setting this to true always asks for a password even if you don't have one.
  # When you do have a password, even with this set to false it will prompt anyhow. 
  sslCertPasswordProtected = 0

อ้างอิง:

ระบุการกำหนดค่าเมื่อgit clone-ing

หากคุณจำเป็นต้องใช้มันบนพื้นฐานของ repo ต่อเอกสารประกอบจะบอกให้คุณเรียกใช้git config --localในไดเรกทอรี repo ของคุณ มันไม่เป็นประโยชน์เมื่อคุณยังไม่ได้ลอกเลียนแบบในเครื่อง แต่ตอนนี้มันเป็นยังไงเหรอ?

คุณสามารถทำglobal -> localhokey-pokey ได้โดยการตั้งค่าส่วนกลางของคุณตามข้างต้นจากนั้นก็คัดลอกการตั้งค่าเหล่านั้นไปยังการตั้งค่า repo ในพื้นที่ของคุณเมื่อมันโคลน ...

หรือสิ่งที่คุณสามารถทำได้คือระบุคำสั่ง config ที่git cloneจะถูกนำไปใช้กับ repo เป้าหมายทันทีที่มันถูกโคลน

# Declare variables to make clone command less verbose     
OUR_CA_PATH=/path/to/selfCA/
OUR_CA_FILE=$OUR_CA_PATH/self-signed-certificate.crt
MY_PEM_FILE=/path/to/privatekey/myprivatecert.pem
SELF_SIGN_CONFIG="-c http.sslCAPath=$OUR_CA_PATH -c http.sslCAInfo=$OUR_CA_FILE -c http.sslVerify=1 -c http.sslCert=$MY_PEM_FILE -c http.sslCertPasswordProtected=0"

# With this environment variable defined it makes subsequent clones easier if you need to pull down multiple repos.
git clone $SELF_SIGN_CONFIG https://mygit.server.com/projects/myproject.git myproject/

หนึ่งในสายการบิน

แก้ไข: ดูคำตอบของVonCที่ชี้ให้เห็น caveat เกี่ยวกับเส้นทางที่แน่นอนและญาติสำหรับรุ่น git เฉพาะจาก 2.14.x / 2.15 ถึงซับหนึ่งนี้

git clone -c http.sslCAPath="/path/to/selfCA" -c http.sslCAInfo="/path/to/selfCA/self-signed-certificate.crt" -c http.sslVerify=1 -c http.sslCert="/path/to/privatekey/myprivatecert.pem" -c http.sslCertPasswordProtected=0 https://mygit.server.com/projects/myproject.git myproject/

CentOS unable to load client key

หากคุณลองทำสิ่งนี้กับ CentOS และ.pemไฟล์ของคุณกำลังให้คุณ

unable to load client key: "-8178 (SEC_ERROR_BAD_KEY)"

จากนั้นคุณจะต้องการให้StackOverflow ตอบคำถามเกี่ยวกับวิธีการcurlใช้ NSS แทน Open SSL

และคุณต้องการสร้างใหม่curlจากแหล่งที่มา :

git clone http://github.com/curl/curl.git curl/
cd curl/
# Need these for ./buildconf
yum install autoconf automake libtool m4 nroff perl -y
#Need these for ./configure
yum install openssl-devel openldap-devel libssh2-devel -y

./buildconf
su # Switch to super user to install into /usr/bin/curl
./configure --with-openssl --with-ldap --with-libssh2 --prefix=/usr/
make
make install

รีสตาร์ทคอมพิวเตอร์เนื่องจาก libcurl ยังคงอยู่ในหน่วยความจำในฐานะห้องสมุดสาธารณะ

Python, pip และ conda

ที่เกี่ยวข้อง : วิธีเพิ่มใบรับรอง CA Root แบบกำหนดเองใน CA Store ที่ใช้โดย pip ใน Windows


ฉันต้องทำให้แน่ใจว่าใบรับรองเซิร์ฟเวอร์ที่ลงชื่อด้วยตนเองอยู่ในรูปแบบ PEM ก่อนที่ Git จะยอมรับ http.sslCAPathนอกจากนี้บางส่วนของคำตอบข้างต้นแสดงให้เห็นว่าคนเดียวที่ต้องการที่จะให้เส้นทางไปยังโฟลเดอร์ใบรับรองของใช้ ในกรณีของฉันฉันต้องใช้http.sslCAInfoเพื่อระบุไฟล์เฉพาะ การอนุญาตให้ Git เชื่อมต่อกับ GitHub ส่วนตัวของเราโดยไม่ปิดการใช้งานการตรวจสอบ SSL
Zarepheth

@Zarepheth ขอบคุณสำหรับข้อมูลนั้น ฉันพบปัญหาเดียวกันกับที่ต้องใช้ทั้ง CAPath และ CAInfo เนื่องจาก CA Cert ของเราเป็นรูปแบบ PEM ฉันจึงมองข้ามเอกสาร ฉันได้อัปเดตคำตอบด้วยส่วนเพิ่มเติมเหล่านี้แล้ว ดีใจที่คุณสามารถเชื่อมต่อได้อย่างปลอดภัย
Josh Peak

นี่อาจเป็นคำตอบ "แก้ไข" ระยะยาวที่ดีที่สุดหากคุณถูกบังคับให้ใช้ HTTPS ในการโคลนและไม่สามารถใช้ SSH เพื่อเลี่ยงผ่านระเบียบใบรับรองได้
dragon788

ฉันกำลังจะเพิ่มคำตอบนี้! ดีใจที่คนอื่นค้นพบแล้ว
Franklin Yu

14

ฉันยังเจอปัญหานี้อยู่ดังนั้นจึงได้เขียนสคริปต์เพื่อดาวน์โหลดใบรับรองที่ลงชื่อด้วยตนเองจากเซิร์ฟเวอร์และติดตั้งเป็น ~ / .gitcerts จากนั้นอัปเดต git-config เพื่อชี้ไปที่ใบรับรองเหล่านี้ มันถูกเก็บไว้ในการกำหนดค่าทั่วโลกดังนั้นคุณจะต้องเรียกใช้เพียงครั้งเดียวต่อระยะไกล

https://github.com/iwonbigbro/tools/blob/master/bin/git-remote-install-cert.sh


ดีแม้ว่ามันจะดีกว่าหากมีตัวเลือกในการใช้การกำหนดค่าท้องถิ่นแทนระดับโลก
Adam Spires

3
คุณสามารถแยกมันออกได้และลบตัวเลือก --global ;-)
Craig

นี่มันเยี่ยมมากมันมาในแบทช์หรือเปล่า?
Halter

10

คำตอบนี้คัดลอกมาจากบทความนี้เขียนโดย Michael Kauffman

ใช้ Git สำหรับ Windows ด้วยใบรับรอง SSL ขององค์กร

ปัญหา :

หากคุณมีใบรับรอง SSL ขององค์กรและต้องการโคลน repo ของคุณจากคอนโซลหรือ VSCode คุณจะได้รับข้อผิดพลาดดังต่อไปนี้:

ร้ายแรง: ไม่สามารถเข้าถึง ' https: // myserver / tfs / DefaultCollection / _git / Proj / ': ปัญหาใบรับรอง SSL: ไม่สามารถรับใบรับรองผู้ออกใบรับรองในท้องถิ่น

วิธีแก้ปัญหา :

  1. ส่งออกใบรับรองที่ลงนามเองรูทไปยังไฟล์ คุณสามารถทำได้จากภายในเบราว์เซอร์ของคุณ

  2. ค้นหาไฟล์“ ca-bundle.crt” ในโฟลเดอร์ git ของคุณ (เวอร์ชันปัจจุบัน C: \ Program Files \ Git \ usr \ ssl \ certs แต่มีการเปลี่ยนแปลงในอดีต) คัดลอกไฟล์ไปยังโปรไฟล์ผู้ใช้ของคุณ เปิดด้วยโปรแกรมแก้ไขข้อความเช่น VSCode และเพิ่มเนื้อหาของใบรับรองที่ส่งออกของคุณไปยังจุดสิ้นสุดของไฟล์

ตอนนี้เราต้องกำหนดค่า git ให้ใช้ไฟล์ใหม่:

git config --global http.sslCAInfo C:/Users/<yourname>/ca-bundle.crt

นี่จะเพิ่มรายการต่อไปนี้ในไฟล์. gitconfig ของคุณในรูทโปรไฟล์ผู้ใช้

[http] sslCAInfo = C:/Users/<yourname>/ca-bundle.crt


1
ขอบคุณฉันพบคำตอบนี้ง่ายกว่าและปลอดภัยกว่าสำหรับ Windows
Pisu

7

หากต้องการปิดใช้งานการตรวจสอบ SSL สำหรับที่เก็บเฉพาะหากที่เก็บอยู่ภายใต้การควบคุมของคุณคุณสามารถลอง:

 git config --global http.sslVerify false

3

ระวังเมื่อคุณใช้สายการบินหนึ่งโดยใช้ sslKey หรือ sslCert เช่นเดียวกับในคำตอบของJosh Peak :

git clone -c http.sslCAPath="/path/to/selfCA" \
  -c http.sslCAInfo="/path/to/selfCA/self-signed-certificate.crt" \
  -c http.sslVerify=1 \
  -c http.sslCert="/path/to/privatekey/myprivatecert.pem" \
  -c http.sslCertPasswordProtected=0 \
https://mygit.server.com/projects/myproject.git myproject

เฉพาะ Git 2.14.x / 2.15 (ไตรมาสที่ 3 ปี 2558) เท่านั้นที่จะสามารถตีความเส้นทาง~username/mykeyได้อย่างถูกต้อง (ในขณะที่มันยังสามารถตีความเส้นทางแบบสัมบูรณ์ได้/path/to/privatekey)

ดูกระทำ 8d15496 (20 กรกฎาคม 2017) โดยJunio C Hamano (gitster )
ช่วยโดย: ชาร์ลส์เบลีย์ (hashpling )
(ผสานโดยJunio ​​C Hamano - gitster-ในการกระทำ 17b1e1d , 11 Aug 2017)

http.c: http.sslcertและhttp.sslkeyเป็นชื่อพา ธ ทั้งคู่

ย้อนกลับเมื่อ http_options () codepath ที่ทันสมัยถูกสร้างขึ้นเพื่อแยกวิเคราะห์ตัวเลือก http. * ต่างๆที่29508e1 ("แยกฟังก์ชั่นการร้องขอ HTTP ที่ใช้ร่วมกันแบบแยก", 2005-11-18, Git 0.99.9k) จากนั้นจึงแก้ไขสำหรับ interation ระหว่างหลายรายการ แฟ้มการกำหนดค่าใน7059cd9 ( " http_init(): แก้ไขไฟล์ config แยก" 2009/03/09, Git-1.6.3 RC0) เราแยกวิเคราะห์ตัวแปรกำหนดค่าเช่นhttp.sslkey, http.sslcertเป็นสตริงวานิลลาธรรมดาเพราะgit_config_pathname()ที่เข้าใจ ' ~[username]/' คำนำหน้าไม่ได้อยู่

ต่อมาเราแปลงบางส่วนของพวกเขา (กล่าวคือhttp.sslCAPathและhttp.sslCAInfo) เพื่อใช้ฟังก์ชั่นและเพิ่มตัวแปรที่ต้องการhttp.cookeyFile http.pinnedpubkeyใช้ฟังก์ชั่นตั้งแต่ต้น ด้วยเหตุนี้ตัวแปรเหล่านี้จึงเข้าใจ~[username]/คำนำหน้าทั้งหมด " "

ทำให้ตัวแปรทั้งสองที่เหลืออยู่http.sslcertและรับhttp.sslkeyรู้ถึงการประชุมเนื่องจากทั้งคู่มีชื่อพา ธ ที่ชัดเจนสำหรับไฟล์


3

การใช้ Git เวอร์ชัน 64 บิตบน Windows เพียงเพิ่มใบรับรอง CA ที่ลงชื่อด้วยตนเองลงในไฟล์เหล่านี้:

  • C: \ Program Files \ Git \ mingw64 \ ssl \ certs \ ca-bundle.crt
  • C: \ Program Files \ Git \ mingw64 \ ssl \ certs \ ca-bundle.trust.crt

หากเป็นเพียงใบรับรองเซิร์ฟเวอร์ที่ลงชื่อด้วยตนเองให้เพิ่มเข้าไป

  • C: \ Program Files \ Git \ mingw64 \ ssl \ cert.pem

นี่เป็นวิธีที่ดีที่สุดในการจัดการกับไฟร์วอลล์ของ บริษัท ของเราที่ลงนามในการรับส่งข้อมูล HTTPS ทั้งหมดอีกครั้ง ฉันเพิ่งเอาไฟล์ crt ที่จัดรูปแบบ PEM ของใบรับรองไฟร์วอลล์เป็นข้อความและคัดลอกแล้ววางลงใน ca-bundle และใช้งานได้อย่างมีเสน่ห์
Mitten.O

3

ตรวจสอบการตั้งค่าป้องกันไวรัสและไฟร์วอลล์ของคุณ

จากวันหนึ่งไปยังอีกคนหนึ่งคอมไพล์ก็ไม่ได้ทำงานอีกต่อไป จากสิ่งที่อธิบายไว้ข้างต้นฉันพบว่า Kaspersky วางใบรับรองการป้องกันไวรัสส่วนบุคคลไว้ในกลาง ฉันไม่ได้จัดการให้ Git ยอมรับใบรับรองดังกล่าวตามคำแนะนำด้านบน ฉันยอมแพ้ต่อสิ่งนั้น สิ่งที่ดีสำหรับฉันคือการปิดการใช้งานคุณสมบัติเพื่อสแกนการเชื่อมต่อที่เข้ารหัส

  1. เปิด Kaspersky
  2. การตั้งค่า> เพิ่มเติม> เครือข่าย> อย่าสแกนการเชื่อมต่อที่เข้ารหัส

หลังจากนี้ให้ใช้งานได้อีกครั้งด้วยการเปิดใช้งาน sslVerify

บันทึก. สิ่งนี้ยังคงไม่เป็นที่พอใจสำหรับฉันเพราะฉันต้องการให้คุณสมบัติของ Anti-Virus ของฉันทำงานอยู่ ในการตั้งค่าขั้นสูง Kaspersky จะแสดงรายการเว็บไซต์ที่ไม่สามารถใช้งานคุณสมบัติดังกล่าวได้ Github ไม่ได้ถูกระบุว่าเป็นหนึ่งในนั้น ฉันจะตรวจสอบที่ฟอรัม Kaspersky ดูเหมือนจะมีบางหัวข้อเช่น https://forum.kaspersky.com/index.php?/topic/395220-kis-interfering-with-git/&tab=comments#comment-2801211


1

ในไฟล์. gitconfigคุณสามารถเพิ่มค่าที่กำหนดด้านล่างเพื่อให้ใบรับรองที่ลงชื่อด้วยตนเองยอมรับได้

sslCAInfo = /home/XXXX/abc.crt


นี่เทียบเท่ากับขั้นตอนที่สองในคำตอบของอดัม
Michael - Where's Clay Shirky

1

ฉันทำแบบนี้:

git init
git config --global http.sslVerify false
git clone https://myurl/myrepo.git

3
อย่าใช้--global! มีบทเรียนมากมายแสดง--globalแต่มันเป็นความคิดที่แย่มากโดยทั่วไปและhttp.sslVerifyโดยเฉพาะอย่างยิ่ง ทันทีที่คุณมีมากกว่าหนึ่งโคลนจากโครงการที่แตกต่างกัน บริษัท ทีมในคอมพิวเตอร์ที่คุณสามารถประสบปัญหาได้อย่างรวดเร็ว ตัวอย่างเช่น ID ผู้ใช้และอีเมลที่รั่วไหลจากโครงการหนึ่งไปอีกโครงการหนึ่งอาจเป็นเรื่องที่น่าอาย และการใช้งาน--globalบนhttp.sslVerifyสามารถเปิดคุณได้ถึงปัญหาด้านความปลอดภัยทุกประเภท ดังนั้น: อย่าใช้--global- หากคุณไม่ได้ตระหนักถึงผลข้างเคียงและพร้อมที่จะรับความเสี่ยง
Martin

1

สำหรับ Windows สิ่งนี้ใช้ได้กับฉัน:

เพิ่มเนื้อหาของใบรับรอง self ลงนามของคุณไปยังจุดสิ้นสุดของCA-กำไฟล์ รวมทั้ง----- BEGIN CERTIFICATE -----และ----- END CERTIFICATE -----เส้น

ตำแหน่งของไฟล์ca-bundleมักจะเป็นC: \ Program Files \ Git \ mingw64 \ ssl \ certs

หลังจากนั้นเพิ่มพา ธ ของไฟล์ca-bundleไปยังการกำหนดค่าโกลบอล git คำสั่งต่อไปนี้จะหลอกลวง:git config --global http.sslCAInfo "C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt"

หมายเหตุ: เส้นทางขึ้นอยู่กับเส้นทางในเครื่องของคุณในไฟล์ ca-bundle!


1

ไม่ใช่วิธีปฏิบัติที่ดีในการตั้งค่า http.sslVerify เป็นเท็จ แต่เราสามารถใช้ใบรับรอง SSL แทน

ดังนั้นตัวแทนสร้างจะใช้ https กับใบรับรอง SSL และ PAT สำหรับการตรวจสอบ ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

คัดลอกเนื้อหาของไฟล์ cer รวมถึง –begin— และ –end--

git bash บนบิลด์เอเจนต์ => git config –global http.sslcainfo“ C: / ไฟล์โปรแกรม / Git / mingw64 / ssl / certs / ca-bundle.crt” ไปที่ไฟล์นี้และเพิ่มเนื้อหา. cer

ดังนั้นตัวแทนการสร้างสามารถเข้าถึงใบรับรอง SSL


0

คำตอบของฉันอาจจะสาย แต่มันก็ใช้ได้สำหรับฉัน มันอาจช่วยใครซักคน

ฉันลองขั้นตอนดังกล่าวข้างต้นและไม่สามารถแก้ไขปัญหาได้

ลองนี้git config --global http.sslVerify false


0

ฉันใช้เครื่อง windows และบทความนี้ช่วยฉัน โดยทั่วไปฉันเปิด ca-bundle.crt ใน notepad และเพิ่มใบรับรองลูกโซ่ในนั้น (ทั้งหมดนั้น) ปัญหานี้มักจะเกิดขึ้นสำหรับเครือข่าย บริษัท ที่เรามีคนกลางนั่งอยู่ระหว่างระบบและ repo คอมไพล์ เราจำเป็นต้องส่งออก certs ทั้งหมดในเชนใบรับรองยกเว้น leaf cert ในรูปแบบฐาน 64 และเพิ่มทั้งหมดไปยัง ca-bundle.crt แล้วกำหนดค่า git สำหรับไฟล์ crt ที่แก้ไขนี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.