it-swarm.asia

كيف يمكنني جعل بوابة قبول شهادة موقعة ذاتيا؟

باستخدام Git ، هل هناك طريقة لإخباره بقبول شهادة موقعة ذاتياً؟

أنا أستخدم خادم https لاستضافة خادم git ، لكن الشهادة موقعة ذاتيًا في الوقت الحالي.

عندما أحاول إنشاء الريبو هناك لأول مرة:

git Push Origin master -f

لقد حصلت على الخطأ:

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

fatal: git-http-Push failed
545
BahaiResearch.com

لقبول شهادة محددة بشكل دائم

جرب http.sslCAPath أو http.sslCAInfo. (إجابة آدم سبيرز تعطي بعض الأمثلة الرائعة. هذا هو الحل الأكثر أمانا لهذا السؤال.

لتعطيل التحقق TLS/SSL للأمر git واحد

حاول تمرير -c إلى git مع متغير التكوين الصحيح ، أو استخدم إجابة التدفق :

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

لتعطيل التحقق من طبقة المقابس الآمنة لمستودع تخزين محدد

إذا كان المستودع تحت سيطرتك تمامًا ، فيمكنك محاولة:

git config http.sslVerify false

يعد تعطيل التحقق من شهادة TLS (/ SSL) عالميًا ممارسة غير آمنة بشكل كبير. لا تفعل ذلك. لا تصدر الأمر أعلاه مع معدل --global.


هناك عدد غير قليل من خيارات تكوين 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.
978
Christopher

يمكنك ضبط 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 .

153
Flow

لست معجبًا كبيرًا بـ [EDIT: الإصدارات الأصلية من] الإجابات الحالية ، لأن تعطيل عمليات التحقق من الأمان يجب أن يكون الملاذ الأخير ، وليس الحل الأول المقدم. على الرغم من أنه لا يمكنك الوثوق بالشهادات الموقعة ذاتيا عند الاستلام الأول دون بعض طرق التحقق الإضافية ، إلا أن استخدام الشهادة لعمليات 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) يعني أن هذه الشهادة الموقعة ذاتياً موثوق بها فقط لهذا المستودع المحدد ، وهو Nice. إنه ألطف أيضًا من استخدام GIT_SSL_CAPATH نظرًا لأنه يزيل خطر قيام git بإجراء عملية التحقق من خلال "المرجع المصدق" المختلف الذي قد يكون عرضة للاختراق.

124
Adam Spiers

بوابة التكوين شهادة موقعة ذاتيا

ليرة تركية، والدكتور

لم تقم مطلقًا بتعطيل جميع عمليات التحقق من 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-

إذا كنت بحاجة إلى تطبيقه على أساس الريبو ، فإن الوثائق تخبرك فقط بتشغيل git config --local في دليل الريبو الخاص بك. حسنًا ، هذا ليس مفيدًا عندما لا تحصل على الريبو المستنسخة محليًا حتى الآن؟

يمكنك القيام بـ global -> local hokey-pokey عن طريق تعيين التكوين العمومي الخاص بك كما هو موضح أعلاه ثم نسخ هذه الإعدادات إلى تكوين الريبو المحلي بمجرد استنساخه ...

أو ما يمكنك القيام به هو تحديد أوامر config في git clone التي يتم تطبيقها على الريبو المستهدف بمجرد استنساخها.

# 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/

بطانة واحدة

EDIT: انظر VonC 's answer التي تشير إلى تحذير حول المسارات المطلقة والنسبية لإصدارات 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 بدلاً من فتح 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 لا يزال في الذاكرة كمكتبة مشتركة

بيثون ، نقطة وكوندا

ذات صلة : كيفية إضافة شهادة CA Root مخصصة إلى متجر CA المستخدم بواسطة pip في Windows؟

26
Josh Peak

ما زلت أواجه هذه المشكلة ، لذا فقد كتبت نصًا لتنزيل الشهادة الموقعة ذاتيا من الخادم وتثبيتها على ~/.gitcerts ، ثم تحديث git-config للإشارة إلى هذه الشهادات. يتم تخزينه في التكوين العام ، لذلك تحتاج فقط إلى تشغيله مرة واحدة لكل جهاز تحكم عن بعد.

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

14
Craig

تم اقتباس هذه الإجابة من هذه المقالة تأليف مايكل كوفمان.

استخدم Git for Windows مع شهادة SSL للشركات

المشكلة :

إذا كان لديك شهادة SSL خاصة بشركة وتريد استنساخ الريبو من وحدة التحكم أو VSCode ، فستحصل على الخطأ التالي:

قاتل: غير قادر على الوصول إلى ‘ https: // myserver/tfs/DefaultCollection/_git/Proj/ ': مشكلة شهادة SSL: غير قادر على الحصول على شهادة مُصدر محلي

الحل :

  1. تصدير الشهادة الموقعة ذاتيا الجذر إلى ملف. يمكنك القيام بذلك من داخل متصفحك.

  2. حدد موقع ملف "ca-bundle.crt" في مجلد git (الإصدار الحالي C:\Program Files\Git\usr\ssl\certs ولكن تم تغييره في الماضي). انسخ الملف إلى ملف تعريف المستخدم الخاص بك. افتحه باستخدام محرر نصوص مثل VSCode وأضف محتوى الشهادة التي تم تصديرها إلى نهاية الملف.

الآن يتعين علينا تكوين بوابة لاستخدام الملف الجديد:

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

سيضيف هذا الإدخال التالي إلى ملف .gitconfig الخاص بك في جذر ملف تعريف المستخدم الخاص بك.

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

6
AperioOculus

تحقق من إعدادات مكافحة الفيروسات وجدار الحماية لديك.

من يوم إلى آخر ، لم تنجح البوابة بعد الآن. مع ما تم وصفه أعلاه ، وجدت أن Kaspersky يضع شهادة جذر شخصية مضادة للفيروسات موقعة ذاتياً في المنتصف. لم أتمكن من السماح لـ Git بقبول تلك الشهادة باتباع الإرشادات المذكورة أعلاه. تخليت عن ذلك. ما يناسبني هو تعطيل الميزة لفحص الاتصالات المشفرة.

  1. افتح كاسبيرسكي
  2. الإعدادات> إضافية> الشبكة> لا تفحص الاتصالات المشفرة

بعد ذلك ، يعمل git مرة أخرى مع تمكين sslVerify.

ملحوظة. لا يزال هذا غير مرضي بالنسبة لي ، لأنني أرغب في تفعيل ميزة مكافحة الفيروسات هذه. في الإعدادات المتقدمة ، تعرض Kaspersky قائمة بمواقع الويب التي لن تعمل مع هذه الميزة. لم يتم سرد جيثب كواحد منهم. سوف تحقق من ذلك في منتدى كاسبرسكي. يبدو أن هناك بعض الموضوعات ، على سبيل المثال https://forum.kaspersky.com/index.php؟/topic/395220-kis-interfering-with-git/&tab=comments#comment-2801211

3
Henk

كن حذرًا عند استخدام بطانة واحدة باستخدام sslKey أو sslCert ، كما في Josh Peak 's answer :

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 فقط (Q3 2015) قادرًا على تفسير مسار مثل ~username/mykey بشكل صحيح (بينما لا يزال بإمكانه تفسير مسار مطلق مثل /path/to/privatekey).

راجع الالتزام 8d15496 (20 يوليو 2017) بواسطة Junio ​​C Hamano (gitster) .
بمساعدة: تشارلز بيلي (hashpling) .
(تم دمجها بواسطة Junio ​​C Hamano - gitster - في الالتزام 17b1e1d ، 11 أغسطس 2017)

http.c: http.sslcert و http.sslkey كلاهما من أسماء المسارات

مرة أخرى عندما تم إنشاء codepath http_options () الحديث لتحليل خيارات http. * المختلفة في 29508e1 ("عزل وظيفة طلب HTTP المشتركة" ، 2005-11-18 ، Git 0.99.9k) ، ثم تم تصحيحه لاحقًا لـ التفاعل بين ملفات التكوين المتعددة في 7059cd9 ("http_init(): إصلاح تحليل ملف التكوين" ، 2009-03-09 ، Git 1.6.3-rc0) ، قمنا بتحليل متغيرات التكوين مثل http.sslkey ، http.sslcert كسلسلة Vanilla عادي ، لأن git_config_pathname() التي تفهم "~[username]/" بادئة غير موجودة.

في وقت لاحق ، قمنا بتحويل بعضها (أي http.sslCAPath و http.sslCAInfo) لاستخدام الوظيفة ، وقمنا بإضافة متغيرات مثل http.cookeyFilehttp.pinnedpubkey لاستخدام الوظيفة من البداية. ولهذا السبب ، فهم جميع هذه المتغيرات بادئة "~[username]/".

اجعل المتغيرين المتبقيين ، http.sslcert و http.sslkey ، مدركين أيضًا للاتفاقية ، حيث أنهما كلاهما من الواضح أنهما اسمان للملفات.

2
VonC

في الملف .gitconfig يمكنك إضافة القيمة المذكورة أدناه لجعل الشهادة الذاتية الموقعة مقبولة

sslCAInfo = /home/XXXX/abc.crt

1
RahulMohan Kolakandy

باستخدام إصدار 64 بت من Git على نظام Windows ، ما عليك سوى إضافة شهادة المرجع المصدق ذاتيًا إلى هذه الملفات:

  • 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
1
Flaviu

قد تكون إجابتي متأخرة ولكنها نجحت بالنسبة لي. قد يساعد شخص ما.

لقد جربت الخطوات المذكورة أعلاه والتي لم تحل المشكلة.

جرب هذا git config --global http.sslVerify false

0
Manjuboyz

أفعل ذلك مثل هذا:

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