Однажды после добавления на сервере с 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).