5 Ways to fix : SSL certificate problem: self signed certificate in certificate chain | Jhooq

Содержание
  1. 17 ответов
  2. http.c: http.sslcert и http.sslkey – оба пути
  3. Конфигурация самозаверяющего сертификата git
  4. Тл ; др
  5. Глобальный .gitconfig для самозаверяющих центров сертификации
  6. Укажите конфигурацию, когда git clone – ing
  7. Один лайнер
  8. CentOS unable to load client key
  9. Python, pip и conda
  10. Centos
  11. Centos unable to load client key
  12. Firefox : to get self signed certificate
  13. Getting os x to trust self-signed ssl certificates
  14. Getting ubuntu, debian and centos to trust self-signed ssl certificates
  15. Getting windows 10 to trust self-signed ssl certificates
  16. Git – github: проверка сертификата сервера не удалась –
  17. Openssl : to get self signed certificate (if you do not have openssl installed then skip this section and move to next)
  18. Python, pip и conda
  19. Resolution
  20. Resolution – configure git to trust self signed certificate
  21. Scenario 1 : git clone – ssl certificate problem: self signed certificate in certificate chain
  22. Scenario 2 : vagrant up – ssl certificate problem: self signed certificate in certificate chain
  23. Scenario 3 : npm err! error: ssl error: self_signed_cert_in_chain
  24. Scenario 4 : pip install connection error: [ssl: certificate_verify_failed] certificate verify failed
  25. Scenario 5 : php – ssl certificate problem: unable to get local issuer certificate
  26. Scenario 7 : using git_ssl_cainfo to accept certificate permanently
  27. Глобальный .gitconfig для самозаверяющих центров сертификации
  28. Один лайнер
  29. Ошибка проверки сертификата сервера. cafile: /etc/ssl/certs/ca-certificates.crt crlfile: нет
  30. Тл ; др
  31. Укажите конфигурацию, когда git clone – ing
  32. Fixing in the config file (recommended)
  33. Workaround – (it is not recommended)
  34. Workaround – (it is not recommended but instead you should add the self signed certificate to trust-store. please continue reading further on how to trust self-signed certificate on different os)

17 ответов

Лучший ответ

Проверьте настройки антивируса и брандмауэра.

Изо дня в день git больше не работал. С помощью того, что описано выше, я обнаружил, что Касперский помещает самоподписанный личный корневой сертификат Антивируса посередине. Мне не удалось разрешить Git принять этот сертификат, следуя приведенным выше инструкциям. Я отказался от этого. Что мне подходит, так это отключение функции сканирования зашифрованных соединений.

  1. Откройте Kaspersky
  2. Настройки> Дополнительно> Сеть> Не сканировать зашифрованные соединения

После этого git снова работает с включенным sslVerify.

Примечание. Меня это все еще не устраивает, потому что я хотел бы, чтобы эта функция моего Антивируса была активной. В расширенных настройках Kaspersky показывает список веб-сайтов, которые не будут работать с этой функцией. Github не входит в их число. Проверю на форуме Касперского. Кажется, есть несколько тем, например https: / /forum.kaspersky.com/index.php?/topic/395220-kis-interfering-with-git/&tab=comments#comment-2801211.

Будьте осторожны при использовании одного лайнера с sslKey или sslCert, как в Джоша Пика https://my-sertif.ru/a/41253757/6309″>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 (3 квартал 2021 г.) сможет правильно интерпретировать такой путь, как ~username/mykey (хотя он все еще может интерпретировать абсолютный путь, например /path/to/privatekey).

См. фиксацию 8d15496 (20 июля 2021 г.) от Junio ​​C Hamano (gitster).
Помощник: Чарльз Бейли (hashpling).
(объединено Junio ​​C Hamano – gitster в commit 17b1e1d, 11 августа 2021 г.

http.c: http.sslcert и http.sslkey – оба пути

Когда был создан современный кодовый путь http_options () для синтаксического анализа различные параметры http. * на странице 29508e1 («Изолировать общий HTTP-запрос функциональность », 18.11.2005, Git 0.99.9k), а затем были исправлены для взаимодействие между несколькими файлами конфигурации в 7059cd9 (“http_init(): Fix config file parsing”, 2009-03-09, Git 1.6.3-rc0), мы проанализировали переменные конфигурации, такие как http.sslkey, http.sslcert как простые ванильные строки, потому что git_config_pathname() понимает Префикса “~[username]/” не существует.

Позже мы преобразовали некоторые из них (а именно, http.sslCAPath и http.sslCAInfo) для использования функции и добавили такие переменные, как http.cookeyFilehttp.pinnedpubkey, чтобы использовать функцию с самого начала. Из-за этого все эти переменные понимают префикс “~[username]/“.

Сделайте оставшиеся две переменные, http.sslcert и http.sslkey, также осведомлены о соглашении, поскольку оба они явно являются путями к файлы.

Конфигурация самозаверяющего сертификата git

Тл ; др

НИКОГДА не отключайте все проверки SSL!

Это создает плохую культуру безопасности. Не будь таким человеком.

Ключи конфигурации, которые вам нужны:

Они предназначены для настройки сертификатов хоста, которым вы доверяете.

Они предназначены для настройки ВАШЕГО сертификата для ответа на запросы 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

Ссылки:

Про сертификаты:  Завуч.рус Дипломы для педагогов за 2 минуты.

Укажите конфигурацию, когда git clone – ing

Если вам нужно применить его для каждого репо, документация говорит вам просто запустить git config --local в вашем каталоге репо. Что ж, это бесполезно, если вы еще не клонировали репо локально, не так ли?

Вы можете сделать global -> local hokey-pokey, установив глобальную конфигурацию, как указано выше, а затем скопировать эти настройки в конфигурацию локального репозитория после ее клонирования …

ИЛИ вы можете указать команды конфигурации в 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/

Один лайнер

РЕДАКТИРОВАТЬ: см. VonCanswer, который указывает на предостережение об абсолютных и относительных путях для конкретных версий 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 в хранилище CA, используемое pip в Windows?

Я не большой поклонник [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) означает, что этот самозаверяющий сертификат является доверенным только для этого конкретного репозитория, что приятно. Это также лучше, чем использование GIT_SSL_CAPATH, поскольку исключает риск того, что git выполнит проверку через другой центр сертификации, что потенциально может быть скомпрометировано.

Centos

In terms of CentOS it is little different

Centos unable to load client key

Если вы пытаетесь это сделать в CentOS, и ваш файл .pem дает вам

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

Затем вам понадобится этот ответ StackOverflow о том, как curl использует NSS вместо Open SSL.

И вам захочется перестроить curl из исходного кода:

Firefox : to get self signed certificate

If you do not have openssl then you can use your browser to (i would recommend using firefox) to download the self signed certificate.

  • Now you have your cert.pem file

Getting os x to trust self-signed ssl certificates

First you need to download the self signed certificate. For downloading the self signed certificate – How to Download Self Singed Certificate?

After you have download the self signed certificate you need to add it to Keychain Access

  1. First you need to locate where you have downloaded the self signed certificate file .i.e.- cert.pem
  2. Now you need to open the Keychain Access on you OS X
  3. You need to drag the self singed certificate cert.pem into the Keychain Access.
  4. You should goto certificates section and locate the certificate you just added
  5. Now double click on the certificate(cert.pem) , goto the trust section and under “When using this certificate” select “Always Trust”
  6. Great now you have added the self singed certificate into your OS X trust store.
Про сертификаты:  Сертификаты по керамической плитке и керамограниту

After you have completed all the 6 steps for adding self-signed certificate into OS X trust store. Run the vagrant up command

Getting ubuntu, debian and centos to trust self-signed ssl certificates

First you need to download the self signed certificate. For downloading the self signed certificate – How to Download Self Singed Certificate?

Getting windows 10 to trust self-signed ssl certificates

First you need to download the self signed certificate. For downloading the self signed certificate – How to Download Self Singed Certificate?

After you have download the self signed certificate you need to follow steps –

Git – github: проверка сертификата сервера не удалась –

Я только что создал учетную запись github и репозиторий в ней, но при попытке создать локальную рабочую копию, используя рекомендуемый URL-адрес через

git clone https://github.com/<user>/<project>.git

Я получаю сообщение об ошибке

фатальный: невозможно получить доступ к ‘https://my-sertif.ru/<user>/ & lt; project & gt; .git ‘: не удалось проверить сертификат сервера. CAfile: /home/<user>/.ssl/trusted.pem CRLfile: нет

Я использую Debian Jessie, и я ожидал, что и Debian, и GitHub будут предоставлять / полагаться на выбор общепринятых центров сертификации, но, видимо, моя система не доверяет сертификату GibHub.

Любой простой способ исправить это (без часто рекомендуемого взлома «GIT_SSL_NO_VERIFY = true» и подобных обходных путей)?

РЕДАКТИРОВАТЬ:

Дополнительная информация:

РЕДАКТИРОВАТЬ:

Совет @VonC относительно опции git https.sslCAinfo направил меня на правильный путь – я только что добавил загруженные центры сертификации cacert.org в свой trust.pem, и теперь git больше не жалуется.

Лучший ответ

Openssl : to get self signed certificate (if you do not have openssl installed then skip this section and move to next)

The above openssl command will output a self singed certificate as below

You need to store the above self signed certificate string into cert.pem file

Now you got the self signed certificate using openssl

Python, pip и conda

По теме : Как добавить настраиваемый корневой сертификат CA в хранилище CA, используемое pip в Windows?

Resolution

This command will let you trust the host .i.e. pypi.org and files.pythonhosted.org

Resolution – configure git to trust self signed certificate

To make more accurate fix to the problem “SSL certificate problem: self signed certificate in certificate chain” we need to –

Scenario 1 : git clone – ssl certificate problem: self signed certificate in certificate chain

It is one of the most common scenario where you sitting behind corporate firewall.

All the traffic is intercepted by corporate firewall and it replaces the certificate and then adds their own self signed certificate.

The self signed certificate is not recognized by anyone apart from you or your organization and which causes the SSL certificate problem: self signed certificate in certificate chain

Scenario 2 : vagrant up – ssl certificate problem: self signed certificate in certificate chain

If you are sitting behind the corporate firewall then, there is very much possibility that your incoming and outbound traffic is being monitored and interrupted.

Due to that your corporate might generate a self signed certificate and which eventually results in “SSL certificate
problem: self signed certificate in certificate chain”

Scenario 3 : npm err! error: ssl error: self_signed_cert_in_chain

One the easiest way to fix the issue is to disable or set to false strict-ssl

Note – Do not set strict-ssl false in production, it always recommend disable the strict-ssl in development environment when its necessary.

The other problem could be your npm is running on old version

So try to upgrade the npm using the following command

After that tell your current version of npm to use know registrars

Scenario 4 : pip install connection error: [ssl: certificate_verify_failed] certificate verify failed

You are trying to install python and somewhere during the installation you noticed this issue.

The root cause of the issue is “certificate validation”. With the latest release of the python, it is getting more stricter and you local machine is not able to trust the host.

In simple words we need to tell our system to trust the certificates which are associated with pypi.org, files.pythonhosted.org etc.

Scenario 5 : php – ssl certificate problem: unable to get local issuer certificate

This could be one more scenario where you may struggle to set up SSL certificate or certificate bundle

I had this issue on my XAMPP server, so here are the steps which I followed for fixing the – SSL certificate problem

  1. Download the certificate bundle from curl.haxx

  2. After downloading put your file cacert-xxxx-xx-xx.pem file somewhere on directory. In my case I kept the file at /opt/lampp/share/curl/cacert-xxxx-xx-xx.pem

  3. Locate your php.ini file. If in case you are not sure how to find php.ini then use the command

This command should return you back with location of php.ini

  1. In the php.ini file look for the line openssl.cafile and then update its value with /opt/lampp/share/curl/cacert-xxxx-xx-xx.pem
  1. After the update save the file and stop the service
  1. Start the service again
  1. Following the above steps, it should fix your issue of SSL certificate problem

Scenario 7 : using git_ssl_cainfo to accept certificate permanently

Git provides a environment variable GIT_SSL_CATINFO, this environment variable can be used for pointing
to specific certificate which you have downloaded manually. Here is a example of setting environment variable
GIT_SSL_CAINFO for the certificate my_custom_downloaded_certificate.pem-

Про сертификаты:  Сертификат соответствия ГОСТ, декларация ТР ТС на помидоры -

Once you have added environment variable GIT_SSL_CAINFO, you can clone the git repo without any self signed
certificate error. Because you have added the certificate permanently to the environment variable which ultimately
makes you trust that particular git repository.

Глобальный .gitconfig для самозаверяющих центров сертификации

Ради меня и моих коллег вот как нам удалось заставить работать самозаверяющие сертификаты, не отключая sslVerify. Измените свой .gitconfig, используя git config –global -e, добавьте следующее:

Один лайнер

РЕДАКТИРОВАТЬ: см. VonCanswer, который указывает на предостережение об абсолютных и относительных путях для конкретных версий git от 2.14.x / 2.15 до этого одного лайнера

Ошибка проверки сертификата сервера. cafile: /etc/ssl/certs/ca-certificates.crt crlfile: нет

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 . Это не означает, что сертификат является подозрительным, но он может быть самоподписанным или подписанным организацией / компанией, которой нет в списке центров сертификации вашей ОС. Чтобы обойти проблему на вашем компьютере, вы должны заставить его доверять этому сертификату, если у вас нет причин для подозрения.

Вам необходимо проверить веб-сертификат, используемый для вашего сервера 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файл), введите:

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

Примечание: Валерий Катков предлагает в комментариях добавить -servernameопцию к команде openssl, в противном случае команда не показывает сертификат для www.my-sertif.ru в случае Валерия.

openssl s_client -showcerts -servername www.github.com -connect www.github.com:443


Финдекано добавляет в комментариях :

чтобы определить местоположение 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

Тл ; др

НИКОГДА не отключайте все проверки SSL!

Это создает плохую культуру безопасности. Не будь таким человеком.

Ключи конфигурации, которые вам нужны:

Они предназначены для настройки сертификатов хоста, которым вы доверяете.

Они предназначены для настройки ВАШЕГО сертификата для ответа на запросы SSL.

Выборочно примените указанные выше настройки к определенным хостам.

Укажите конфигурацию, когда git clone – ing

Если вам нужно применить его для каждого репо, документация говорит вам просто запустить git config –local в вашем каталоге репо. Что ж, это бесполезно, если вы еще не клонировали репо локально, не так ли?

Вы можете сделать global -> local hokey-pokey, установив глобальную конфигурацию, как указано выше, а затем скопировать эти настройки в конфигурацию локального репозитория после ее клонирования …

ИЛИ вы можете указать команды конфигурации в git clone, которые применяются к целевому репо после его клонирования.

There is one more way to fix this issue by adding the hosts to config files .i.e. pip.ini or pip.conf based on the operating system you are having.

Unix – In Unix operating system you can locate the file at $HOME/.config/pip/pip.conf

Disable Git SSL verification while cloning the repository

If you are the owner of the Git Repo then you can globally disable the ssl verification

Goto your Vagrantfile and add box_download_insecure = true

Here is complete Vagrantfile, it creates two VMs – One master node and One worker node

Once you add box_download_insecure = true into your vagrantfile then you should be able to start your VMs successfully

Оцените статью
Мой сертификат
Добавить комментарий