Однажды после добавления на сервере с CentOS 6 очередного репозитория в yum я обнаружил, что yum c ним работать отказывается, выдавая печальное сообщение об ошибке "problem making ssl connection":
$ cat /etc/issue ; uname -r
CentOS release 6.4 (Final)
Kernel \r on an \m
2.6.32-358.2.1.el6.x86_64
$ sudo yum install apache-maven
Loaded plugins: fastestmirror, security
Setting up Local Package Process
Examining apache-maven-3.2.5-1.el6.noarch.rpm: apache-maven-3.2.5-1.el6.noarch
Marking apache-maven-3.2.5-1.el6.noarch.rpm to be installed
Loading mirror speeds from cached hostfile
* base: mirror.raystedman.net
* extras: yum.tamu.edu
* rpmforge: mirror.hmc.edu
* updates: mirror.cogentco.com
http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-6/x86_64/repodata/repomd.xml: [Errno 14] problem making ssl connection
Trying other mirror.
Сразу возник вопрос – какой нафиг SSL, если URL начинается с http? При более пристальном изучении URL-а с помощью curl-а оказалось, что там есть 302-ой редирект на URL, начинающийся с https:
$ curl -v http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-6/x86_64/repodata/repomd.xml
* About to connect() to repos.fedorapeople.org port 80 (#0)
* Trying 152.19.134.191... connected
* Connected to repos.fedorapeople.org (152.19.134.191) port 80 (#0)
> GET /repos/dchen/apache-maven/epel-6/x86_64/repodata/repomd.xml HTTP/1.1
> User-Agent: curl/7.21.0 (x86_64-redhat-linux-gnu) libcurl/7.21.0 NSS/3.12.10.0 zlib/1.2.5 libidn/1.18 libssh2/1.2.4
> Host: repos.fedorapeople.org
> Accept: */*
>
< HTTP/1.1 302 Found
< Date: Wed, 25 Feb 2015 12:19:43 GMT
< Server: Apache/2.2.15
< Location: https://repos.fedorapeople.org/repos/dchen/apache-maven/epel-6/x86_64/repodata/repomd.xml
< Cache-Control: max-age=0
< Expires: Wed, 25 Feb 2015 12:19:43 GMT
< Content-Length: 352
< Connection: close
< Content-Type: text/html; charset=iso-8859-1
<
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>302 Found</title>
</head><body>
<h1>Found</h1>
<p>The document has moved <a href="https://repos.fedorapeople.org/repos/dchen/apache-maven/epel-6/x86_64/repodata/repomd.xml">here</a>.</p>
<hr>
<address>Apache/2.2.15 Server at repos.fedorapeople.org Port 80</address>
</body></html>
* Closing connection #0
Так как свежий maven был все еще очень нужен, продолжаем разбираться дальше. У yum-а есть переменная окружения, включающая отладочный лог:
# URLGRABBER_DEBUG=1 yum install apache-maven 2> /tmp/yum-debug.log
В результате в файле /tmp/yum-debug.log получаем 45КБ инфы от urlgrabber-а, самое полезная часть которой выглядит вот так:
< HTTP/1.1 302 Found
< Date: Wed, 25 Feb 2015 11:16:47 GMT
< Server: Apache/2.2.15
< Location: https://repos.fedorapeople.org/repos/dchen/apache-maven/epel-6/x86_64/repodata/repomd.xml
< Cache-Control: max-age=0
< Expires: Wed, 25 Feb 2015 11:16:47 GMT
< Content-Length: 352
< Connection: close
< Content-Type: text/html; charset=iso-8859-1
2015-02-25 11:16:47,307 header ended:
INFO:urlgrabber:header ended:
<
* Closing connection #0
* Issue another request to this URL: 'https://repos.fedorapeople.org/repos/dchen/apache-maven/epel-6/x86_64/repodata/repomd.xml'
* About to connect() to repos.fedorapeople.org port 443 (#0)
* Trying 152.19.134.191... * connected
* Connected to repos.fedorapeople.org (152.19.134.191) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
* NSS error -8092
* Closing connection #0
* SSL connect error
2015-02-25 11:16:47,522 exception: [Errno 14] problem making ssl connection
INFO:urlgrabber:exception: [Errno 14] problem making ssl connection
2015-02-25 11:16:47,523 calling callback: (<bound method YumBaseCli.failureReport of <cli.YumBaseCli object at 0x7fd1ad643410>>, (), {})
INFO:urlgrabber:calling callback: (<bound method YumBaseCli.failureReport of <cli.YumBaseCli object at 0x7fd1ad643410>>, (), {})
http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-6/x86_64/repodata/repomd.xml: [Errno 14] problem making ssl connection
Trying other mirror.
2015-02-25 11:16:47,523 MIRROR: failed
INFO:urlgrabber:MIRROR: failed
2015-02-25 11:16:47,523 GR mirrors: [] 0
INFO:urlgrabber:GR mirrors: [] 0
2015-02-25 11:16:47,524 MAIN mirrors: [http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-6/x86_64/] 0
INFO:urlgrabber:MAIN mirrors: [http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-6/x86_64/] 0
Error: Nothing to do
Не шибко информативно, однако. Но вот одна строчка из всей этой простыни NSS error -8092 навела на мысль, что можно попробовать обновить библиотеки NSS:
$ rpm -qi nss | sed -r '/^Description/,$ !d'
Description :
Network Security Services (NSS) is a set of libraries designed to
support cross-platform development of security-enabled client and
server applications. Applications built with NSS can support SSL v2
and v3, TLS, PKCS #5, PKCS #7, PKCS #11, PKCS #12, S/MIME, X.509
v3 certificates, and other security standards.
$ sudo yum -y update nss
И таки случилось чудо! Yum перестал выдавать ошибку, подхватил свежедобавленный репозиторий и поставил мне нужные RPM-пакеты.
Happy End :)
Кстати, еще может быть похожая беда, когда yum пишет "[Errno 14] Peer cert cannot be verified or peer cert invalid". В моём случае это было связано с неправильной установкой времени на сервере. После синхронизации часов эта ошибка пропала. Если установка правильного времени не помогла, тогда в качестве временного workaround-а может быть полезной установка опции sslverify=false в конфиге yum-а (/etc/yum.conf).