Я на Windows-машине с запущенным Docker. Образ докера FROM php:7.3-apache
.
с
Система: Linux b6df004de9df 4.9.184-linuxkit # 1 SMP Вт 2 июля 22:58:16 UTC 2019 x86_64
с успешно установленным Composer в этом контейнере с Composer версии 1.9.0 2019-08-02 20: 55: 32.
Теперь я вошел в bash
контейнера и ввелкоманда $ composer init , которая успешно запускается и инициализирует композитора, однако после команды $ composer install выдает ошибку
[Composer \ Downloader \TransportException] "https://repo.packagist.org/packages.json" файл не может быть загружен: операция SSL не выполнена с кодом 1. Открыть сообщения об ошибках SSL: ошибка: 1416F086: процедуры SSL: tls_process_server_certificate: сбой проверки сертификата
Не удалось включить шифрование, не удалось открытьПоток: операция завершилась неудачно
Поскольку я видел ошибку OpenSSL для сертификата, я попытался получить точную ошибку:
root @ b6df004de9df: / var / www / html/ my_JSON_proj # openssl s_client -connect www.google.com:443 CONNECTED (00000003) глубина = 2 C = США, ST = Калифорния, O = Zscaler Inc., OU = Zscaler Inc., CN = Zscaler Intermediate Root CA (zscalertwo.net),emailAddress = support@zscaler.com подтвердить ошибку: num = 20: невозможно получить сертификат локального эмитента
Чтобы подтвердить, я снова попытался:
root @ b6df004de9df: / var / www / html / my_JSON_proj # curl https://google.com curl: (60) Проблема с сертификатом SSL: невозможно получить сертификат локального эмитента
Openssl Версия: OpenSSL 1.1.0k 28 мая 2019
Вывод openssl_get_cert_locations ():
array(8) {
["default_cert_file"]=> "/usr/lib/ssl/cert.pem"
["default_cert_file_env"]=> "SSL_CERT_FILE"
["default_cert_dir"]=> "/usr/lib/ssl/certs"
["default_cert_dir_env"]=> "SSL_CERT_DIR"
["default_private_dir"]=> "/usr/lib/ssl/private"
["default_default_cert_area"]=> "/usr/lib/ssl"
["ini_cafile"]=> ""
["ini_capath"]=> ""
}
Итак, чтобы решить эту проблему Решения, которые я пытался:
Я создал свой сертификат localhost Ссылка: https://www.digicert.com/ssl-support/openssl-quick-reference-guide.htm#:~:targetText=OpenSSL%20is%20an%20open%2Dsource,and%20how%20to%20use%20them., но не уверен, когда этот сертификат помещать в / usr / local / share /папка ca-certifcates / и пробовал curl https://google.com/ --cacert /usr/local/share/ca-certifcates/localhost.pem - все тот же error
Отредактировал мой / usr / local / etc / php / php.ini файл конфигурации php для добавления
curl.cainfo="/usr/local/share/ca-certificates/localhost.pem"
openssl.cafile = "/usr/local/share/ca-certificates/localhost.pem"
просто чтобы найти - та же ошибка
Я пытался это безуспешно. Я буквально отсканировал почти все сообщения о переполнении стека, связанные с curl, OpenSSL, SSL, Docker и т. Д., И не смог найти ответ.
- ДОПОЛНИТЕЛЬНЫЕ ОБНОВЛЕНИЯ И НАХОДКИ
- Удивительно, но файл cacert.pem, указанный в https://curl.haxx.se/ca/cacert.pem (примечание - http s ) для решения проблемы SSL, в то время как я не могу подключиться к защищенномуссылки, как я могу даже скачать файл pem с https? вроде тупик? В любом случае, поэтому я попытался загрузить с помощью
wget http://curl.haxx.se/ca/cacert.pem
небезопасный способ получить файл pem, и я получил вывод:
root@b6df004de9df:/usr/local/etc/openssl# wget http://curl.haxx.se/ca/cacert.pem
--2019-11-08 10:21:30-- http://curl.haxx.se/ca/cacert.pem
Resolving curl.haxx.se (curl.haxx.se)... 151.101.38.49, 2a04:4e42:9::561
Connecting to curl.haxx.se (curl.haxx.se)|151.101.38.49|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://curl.haxx.se/ca/cacert.pem [following]
--2019-11-08 10:21:31-- https://curl.haxx.se/ca/cacert.pem
Connecting to curl.haxx.se (curl.haxx.se)|151.101.38.49|:443... connected.
ERROR: The certificate of 'curl.haxx.se' is not trusted.
ERROR: The certificate of 'curl.haxx.se' hasn't got a known issuer.
И так как этоСервер Linux и GUI недоступны, так что, похоже, единственный возможный способ загрузки - через терминал, а не через браузер.
При этом я вручную создал файл cacert.pem и ввел в него содержимое из curl. haxx.se. А затем обновил php.ini со следующими изменениями и перезапустил сервер apache.
curl.cainfo: /usr/local/etc/openssl/cacert.pem
& openssl.cafile: /usr/local/etc/openssl/cacert.pem
Все еще - curl: (60) Проблема с сертификатом SSL: невозможно получить сертификат локального эмитента
Обновлен php.ini для curl.cainfo и openssl.cafile с использованием "/usr/lib/ssl/cert.pem" в качестве "default_cert_file" в соответствии с openssl_get_cert_locations (). Перезапущенный сервер Apache. Пробовал с curl https://www.google.com
- Все еще curl: (60) Проблема с сертификатом SSL: невозможно получить сертификат локального эмитента
Создан новый каталог 'ssl', так как он еще не существовал и предполагается, что по умолчанию каталог OpenSSL равен /usr/local/ssl
. Создал файл cacert.pem в этой папке. Обновлены записи curl.cainfo и openssl.cafile в php.ini с этим новым обновленным путем. Чтобы быть на более безопасной стороне, на всякий случай исполните update-ca-certificates --fresh
. Перезапустил сервер apache. Пробовал с curl https://www.google.com
- Все еще curl: (60) Проблема с сертификатом SSL: невозможно получить сертификат локального эмитента
На стороне отметить полный вывод cURLкоманда :
root@b6df004de9df:/usr/lib/ssl/certs# curl https://thawte.com
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https://curl.haxx.se/docs/sslcerts.html
curl performs SSL certificate verification by default, using a "bundle"
of Certificate Authority (CA) public keys (CA certs). If the default
bundle file isn't adequate, you can specify an alternate file
using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
the bundle, the certificate verification probably failed due to a
problem with the certificate (it might be expired, or the name might
not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
the -k (or --insecure) option.
root@b6df004de9df:/usr/lib/ssl/certs# openssl s_client -connect thawte.com:443
CONNECTED(00000003)
depth=2 C = US, ST = California, O = Zscaler Inc., OU = Zscaler Inc., CN = Zscaler Intermediate Root CA (zscalertwo.net)
, emailAddress = support@zscaler.com
verify error:num=20:unable to get local issuer certificate
---
Certificate chain
0 s:/businessCategory=Private Organization/jurisdictionC=US/jurisdictionST=Utah/serialNumber=5299537-0142/C=US/ST=Utah/
L=Lehi/O=DigiCert, Inc./OU=IT/CN=thawte.com
i:/C=US/ST=California/O=Zscaler Inc./OU=Zscaler Inc./CN=Zscaler Intermediate Root CA (zscalertwo.net) (t)
1 s:/C=US/ST=California/O=Zscaler Inc./OU=Zscaler Inc./CN=Zscaler Intermediate Root CA (zscalertwo.net) (t)
i:/C=US/ST=California/O=Zscaler Inc./OU=Zscaler Inc./CN=Zscaler Intermediate Root CA (zscalertwo.net)/emailAddress=su
pport@zscaler.com
2 s:/C=US/ST=California/O=Zscaler Inc./OU=Zscaler Inc./CN=Zscaler Intermediate Root CA (zscalertwo.net)/emailAddress=su
pport@zscaler.com
i:/C=US/ST=California/L=San Jose/O=Zscaler Inc./OU=Zscaler Inc./CN=Zscaler Root CA/emailAddress=support@zscaler.com
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIGpzCCBY+gAwIBAgIQv2zANBgkqhkiG9w0XcVFbs+k59YwRwR4v+pBAQsFADCB
jTELMAkMxEzARBgNVBAgGA1UEBhMCVVTCkNhbGlmb3JuaWExFTATBgNVBAoTDFpz
... few more lines ...
vxrc40H5bMPW/NgnBjRtUEPnAx9b3ll/sj3KfhbxU0bgnEYNMLb+nwnK6NDZRFpC
5E3fG+TFc9ehaBcF5xWttKz28Wr2nUUhMLhC
-----END CERTIFICATE-----
subject=/businessCategory=Private Organization/jurisdictionC=US/jurisdictionST=Utah/serialNumber=5299537-0142/C=US/ST=Ut
ah/L=Lehi/O=DigiCert, Inc./OU=IT/CN=thawte.com
issuer=/C=US/ST=California/O=Zscaler Inc./OU=Zscaler Inc./CN=Zscaler Intermediate Root CA (zscalertwo.net) (t)
---
No client certificate CA names sent
Peer signing digest: SHA512
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 4270 bytes and written 326 bytes
Verification error: unable to get local issuer certificate
---
New, TLSv1.0, Cipher is ECDHE-RSA-AES128-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES128-SHA
Session-ID:
Session-ID-ctx:
Master-Key: 06D54188D4F60C7746664262F72361EFE8DC728E9D37FDB25641A28C226DE83C3C574C781A0E4A268A7AEB6187EF54BF
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1573209517
Timeout : 7200 (sec)
Verify return code: 20 (unable to get local issuer certificate)
Extended master secret: no
---
read:errno=0
Текущий DockerFile, используемый для создания образа:
FROM php:7.3-apache
RUN docker-php-ext-install mysql mysqli
RUN apt-get update -y && apt-get install -y sendmail libpng-dev
RUN apt-get update && \
apt-get install -y \
zlib1g-dev
libbz2-dev \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng12-dev \
libxpm-dev \
libvpx-dev \
libmcrypt-dev \
libmemcached-dev \
&& \
RUN docker-php-ext-install mbstring
RUN docker-php-ext-install zip
RUN docker-php-ext-install gd
RUN docker-php-ext-install opcache
RUN docker-php-ext-install \
bcmath \
bz2 \
exif \
ftp \
gd \
gettext \
mbstring \
mcrypt \
mysqli \
opcache \
pdo_mysql \
shmop \
sockets \
sysvmsg \
sysvsem \
sysvshm \
zip \
p7zip-full \
&& \