telegram getwebhookinfo возвращает & ldquo; Ошибка SSL {SSL-процедуры: tls_process_server_certificate: проверка сертификата не выполнена} & rdquo; [Дубликат]

Angular1

Для людей, которые используют AngularJS , может справиться с этой ситуацией, используя Promises.

Здесь it говорит,

Обещания могут использоваться для отключения асинхронных функций и позволяют объединять несколько функций вместе.

Вы можете найти приятное объяснение здесь .

Пример, найденный в docs , упомянутом ниже.

  promiseB = promiseA.then(
    function onSuccess(result) {
      return result + 1;
    }
    ,function onError(err) {
      //Handle error
    }
  );

 // promiseB will be resolved immediately after promiseA is resolved 
 // and its value will be the result of promiseA incremented by 1.

Angular2 and Later

In Angular2, посмотрите на следующий пример, но его рекомендовал использовать Observables с Angular2.

 search(term: string) {
     return this.http
  .get(`https://api.spotify.com/v1/search?q=${term}&type=artist`)
  .map((response) => response.json())
  .toPromise();

}

Вы можете использовать это таким образом,

search() {
    this.searchService.search(this.searchField.value)
      .then((result) => {
    this.result = result.artists.items;
  })
  .catch((error) => console.error(error));
}

См. здесь оригинал . Но TypScript не поддерживает native es6 Promises , если вы хотите его использовать, для этого вам может понадобиться плагин.

Кроме того, здесь представлены обещания spec определите здесь.

866
задан jww 13 January 2015 в 21:38
поделиться

12 ответов

Вы можете сделать это с помощью одной команды:

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365

Вы также можете добавить -nodes, если вы не хотите защищать свой закрытый ключ парольной фразой, иначе он предложит вам " как минимум 4 символа ". Параметр days (365) можно заменить любым числом, чтобы повлиять на дату истечения срока действия. Затем он предложит вам такие вещи, как «Имя страны», но вы можете просто нажать «Ввести» и принять значения по умолчанию.

Добавить -subj '/CN=localhost', чтобы подавить вопросы о содержимом сертификата (замените localhost на желаемый domain)

Самозаверяющие сертификаты не проверяются третьим лицом, если вы ранее не импортировали их в браузер. Если вам нужна дополнительная безопасность, вы должны использовать сертификат, подписанный CA.

1511
ответ дан TPAKTOPA 31 August 2018 в 20:05
поделиться

Сгенерировать ключи

Я использую /etc/mysql для хранения сертификатов, потому что /etc/apparmor.d/usr.sbin.mysqld содержит /etc/mysql/*.pem r.

sudo su -
cd /etc/mysql
openssl genrsa -out ca-key.pem 2048;
openssl req -new -x509 -nodes -days 1000 -key ca-key.pem -out ca-cert.pem;
openssl req -newkey rsa:2048 -days 1000 -nodes -keyout server-key.pem -out server-req.pem;
openssl x509 -req -in server-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem;
openssl req -newkey rsa:2048 -days 1000 -nodes -keyout client-key.pem -out client-req.pem;
openssl x509 -req -in client-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem;

Добавить конфигурацию

/etc/mysql/my.cnf

[client]
ssl-ca=/etc/mysql/ca-cert.pem
ssl-cert=/etc/mysql/client-cert.pem
ssl-key=/etc/mysql/client-key.pem

[mysqld]
ssl-ca=/etc/mysql/ca-cert.pem
ssl-cert=/etc/mysql/server-cert.pem
ssl-key=/etc/mysql/server-key.pem

В моей настройке сервер ubuntu зарегистрировался на: /var/log/mysql/error.log

Последующие примечания:

  • SSL error: Unable to get certificate from '...' Mysql может быть отказано в доступе к чтению вашего файла сертификата, если он не находится в apparmors config . Как упоминалось в предыдущих шагах ^, сохраните все наши сертификаты в виде .pem файлов в каталоге /etc/mysql/, которые по умолчанию одобрены apparmor (или измените ваш apparmor / SELinux, чтобы разрешить доступ туда, где вы их сохранили.)
  • SSL error: Unable to get private key Версия вашего сервера mysql может не поддерживать формат по умолчанию rsa:2048. Covert сгенерировал rsa:2048 равным rsa с помощью:
    openssl rsa -in server-key.pem -out server-key.pem
    openssl rsa -in client-key.pem -out client-key.pem
    
  • Проверьте, поддерживает ли локальный сервер ssl :
    mysql -u root -p
    mysql> show variables like "%ssl%"; 
    +---------------+----------------------------+
    | Variable_name | Value                      |
    +---------------+----------------------------+
    | have_openssl  | YES                        |
    | have_ssl      | YES                        |
    | ssl_ca        | /etc/mysql/ca-cert.pem     |
    | ssl_capath    |                            |
    | ssl_cert      | /etc/mysql/server-cert.pem |
    | ssl_cipher    |                            |
    | ssl_key       | /etc/mysql/server-key.pem  |
    +---------------+----------------------------+
    
  • Проверка соединения с db зашифрована ssl :

    Проверка соединения

    При входе в экземпляр MySQL вы можете выполнить запрос:
    show status like 'Ssl_cipher'; 
    
    Если ваше соединение не зашифровано, результат будет пустым:
    mysql> show status like 'Ssl_cipher'; 
    +---------------+-------+ 
    | Variable_name | Value | 
    +---------------+-------+ 
    | Ssl_cipher    |       |  
    +---------------+-------+ 
    1 row in set (0.00 sec) 
    
    В противном случае он отобразит ненулевую строку длины для используемого cypher:
    mysql> show status like 'Ssl_cipher'; 
    +---------------+--------------------+ 
    | Variable_name | Value              | 
    +---------------+--------------------+ 
    | Ssl_cipher    | DHE-RSA-AES256-SHA |  
    +---------------+--------------------+ 
    1 row in set (0.00 sec) 
    
  • Требовать ssl для подключения конкретного пользователя ('require ssl'): SSL Сообщает серверу разрешать только SSL-зашифрованные подключения для учетной записи.
    GRANT ALL PRIVILEGES ON test.* TO 'root'@'localhost'
      REQUIRE SSL;
    
    Чтобы подключиться, клиент должен указать параметр -ssl-ca для проверки подлинности сертификата сервера и может дополнительно указать опции -ssl-key и -ssl-cert. Если не указан параметр --ssl-ca или опция -ssl-capath, клиент не проверяет подлинность сертификата сервера.

Альтернативная ссылка: Длительный учебник здесь http://www.madirish.net/214

2
ответ дан 2 revs 31 August 2018 в 20:05
поделиться

Вот варианты, описанные в @ diegows's answer , более подробно описанные в документации :

openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days XXX
req

Запрос сертификата PKCS № 10 и утилита создания сертификатов.

-x509

эта опция выводит самозаверяющий сертификат вместо запроса сертификата. Обычно это используется для создания тестового сертификата или собственного корневого ЦС.

-newkey arg

этот параметр создает новый запрос сертификата и новый закрытый ключ. Аргумент принимает одну из нескольких форм. rsa: nbits, где nbits - количество бит, генерирует nbits ключа RSA в размере.

-keyout filename

это дает имя файла для записи вновь созданного закрытого ключа.

-out filename

Указывает выходное имя файла для записи или стандартного вывода по умолчанию.

-days n

, когда используется опция -x509, указывается количество дней для сертификации сертификата. Значение по умолчанию - 30 дней.

-nodes

Если этот параметр указан, то если создается закрытый ключ, он не будет зашифрован.

Документация на самом деле больше подробно, чем выше, я просто подвел его здесь.

393
ответ дан Community 31 August 2018 в 20:05
поделиться

Это сценарий, который я использую в локальных блоках для установки SAN (subjectAltName) в самозаверяющих сертификатах.

Этот скрипт принимает имя домена (example.com) и генерирует SAN для * .example.com и example.com в том же сертификате. Прокомментированы следующие разделы. Назовите сценарий (например, generate-ssl.sh) и предоставите ему права на выполнение. Файлы будут записаны в тот же каталог, что и скрипт.

Для Chrome 58 и далее требуется, чтобы SAN устанавливался в самозаверяющих сертификатах.

#!/usr/bin/env bash

# Set the TLD domain we want to use
BASE_DOMAIN="example.com"

# Days for the cert to live
DAYS=1095

# A blank passphrase
PASSPHRASE=""

# Generated configuration file
CONFIG_FILE="config.txt"

cat > $CONFIG_FILE <<-EOF
[req]
default_bits = 2048
prompt = no
default_md = sha256
x509_extensions = v3_req
distinguished_name = dn

[dn]
C = CA
ST = BC
L = Vancouver
O = Example Corp
OU = Testing Domain
emailAddress = webmaster@$BASE_DOMAIN
CN = $BASE_DOMAIN

[v3_req]
subjectAltName = @alt_names

[alt_names]
DNS.1 = *.$BASE_DOMAIN
DNS.2 = $BASE_DOMAIN
EOF

# The file name can be anything
FILE_NAME="$BASE_DOMAIN"

# Remove previous keys
echo "Removing existing certs like $FILE_NAME.*"
chmod 770 $FILE_NAME.*
rm $FILE_NAME.*

echo "Generating certs for $BASE_DOMAIN"

# Generate our Private Key, CSR and Certificate
# Use SHA-2 as SHA-1 is unsupported from Jan 1, 2017

openssl req -new -x509 -newkey rsa:2048 -sha256 -nodes -keyout "$FILE_NAME.key" -days $DAYS -out "$FILE_NAME.crt" -passin pass:$PASSPHRASE -config "$CONFIG_FILE"

# OPTIONAL - write an info to see the details of the generated crt
openssl x509 -noout -fingerprint -text < "$FILE_NAME.crt" > "$FILE_NAME.info"

# Protect the key
chmod 400 "$FILE_NAME.key"

Этот скрипт также записывает info file, чтобы вы могли проверить новый сертификат и проверить правильность установки SAN.

                ...
                28:dd:b8:1e:34:b5:b1:44:1a:60:6d:e3:3c:5a:c4:
                da:3d
            Exponent: 65537 (0x10001)
    X509v3 extensions:
        X509v3 Subject Alternative Name: 
            DNS:*.example.com, DNS:example.com
Signature Algorithm: sha256WithRSAEncryption
     3b:35:5a:d6:9e:92:4f:fc:f4:f4:87:78:cd:c7:8d:cd:8c:cc:
     ...

Если вы используете Apache, вы можете ссылаться на вышеуказанный сертификат в вашем файле конфигурации следующим образом:

<VirtualHost _default_:443>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/htdocs

    SSLEngine on
    SSLCertificateFile path/to/your/example.com.crt
    SSLCertificateKeyFile path/to/your/example.com.key
</VirtualHost>

Не забудьте перезапустить сервер Apache (или Nginx или IIS), чтобы новый сертификат вступил в силу.

11
ответ дан Drakes 31 August 2018 в 20:05
поделиться

2017 Один лайнер:

openssl req \
-newkey rsa:2048 \
-x509 \
-nodes \
-keyout server.pem \
-new \
-out server.pem \
-subj /CN=localhost \
-reqexts SAN \
-extensions SAN \
-config <(cat /System/Library/OpenSSL/openssl.cnf \
    <(printf '[SAN]\nsubjectAltName=DNS:localhost')) \
-sha256 \
-days 3650

Это также работает в Chrome 57, так как он предоставляет SAN без наличия другого файла конфигурации. Взято из ответа здесь . Это создает один файл .pem, который содержит как закрытый ключ, так и сертификат. Вы можете переместить их, чтобы отделить файлы .pem, если это необходимо.

8
ответ дан joemillervi 31 August 2018 в 20:05
поделиться

Я бы рекомендовал добавить параметр -sha256, чтобы использовать алгоритм хэша SHA-2, потому что основные браузеры рассматривают, чтобы показать «сертификаты SHA-1» как небезопасные.

То же командная строка из принятый ответ - @diegows с добавленным -sha256

openssl req -x509 -sha256 -newkey rsa: 2048 -keyout key.pem -out cert.pem -days XXX

Дополнительная информация в блоге безопасности Google .

Обновление до 2018 года. Как отмечалось в комментариях, использование SHA-2 не добавляет никакой безопасности для самоподписанного сертификата. Но я по-прежнему рекомендую использовать его как хорошую привычку не использовать устаревшие / небезопасные криптографические хэш-функции. Полное объяснение доступно в: https://security.stackexchange.com/questions/91913/why-is-it-fine-for-certificates-above-the-end-entity-certificate-to-be-sha1 -base

64
ответ дан Maris B. 31 August 2018 в 20:05
поделиться

У вас правильная процедура. Синтаксис команды ниже.

openssl req -new -key {private key file} -out {output file}

Однако предупреждения отображаются, потому что браузер не смог проверить идентификацию, подтвердив сертификат с помощью известного центра сертификации (CA).

Поскольку это самоподписанный сертификат, нет CA, и вы можете спокойно проигнорировать предупреждение и продолжить. Если вы хотите получить реальный сертификат, который будет распознан кем-либо в общедоступном Интернете, тогда процедура будет ниже.

  1. Сгенерировать закрытый ключ
  2. Использовать этот закрытый ключ для создать файл CSR
  3. Отправить CSR в CA (Verisign или другие и т. д.)
  4. Установить полученный сертификат из CA на веб-сервере
  5. Добавить другие сертификаты в цепочку аутентификации в зависимости от на типе cert

У меня есть более подробная информация об этом в сообщении в https://bigthinkingapplied.com/secure-the-connection-installing-certificates-on-3- общий веб-сервера /

5
ответ дан nneko 31 August 2018 в 20:05
поделиться

Один вкладыш FTW. Мне нравится держать его простым. Почему бы не использовать одну команду, содержащую ВСЕ необходимые аргументы? Вот как мне это нравится: это создает сертификат x509 и это PEM-ключ:

openssl req -x509 \
 -nodes -days 365 -newkey rsa:4096 \
 -keyout self.key.pem \
 -out self-x509.crt \
 -subj "/C=US/ST=WA/L=Seattle/CN=example.com/emailAddress=someEmail@gmail.com" 

Эта единственная команда содержит все ответы, которые вы обычно указали для деталей сертификата. Таким образом, вы можете установить параметры и запустить команду, получить свой результат - затем пойти на кофе.

>> подробнее здесь & lt; & lt;

4
ответ дан OkezieE 31 August 2018 в 20:05
поделиться

Я не могу комментировать, поэтому поместим это как отдельный ответ. Я нашел несколько проблем с принятым однострочным ответом:

  • В однострочный файл входит ключевая фраза в ключе.
  • В однострочном пространстве используется SHA1, который во многих браузеры вызывают предупреждения в консоли.

Вот упрощенная версия, которая удаляет кодовую фразу, повышает безопасность для подавления предупреждений и включает предложение в комментарии для передачи в -subj для удаления полного списка вопросов:

openssl genrsa -out server.key 2048
openssl rsa -in server.key -out server.key
openssl req -sha256 -new -key server.key -out server.csr -subj '/CN=localhost'
openssl x509 -req -sha256 -days 365 -in server.csr -signkey server.key -out server.crt

Заменить «localhost» на любой домен, который вам нужен. Вам нужно будет выполнить первые две команды один за другим, так как openssl предложит кодовую фразу.

Чтобы объединить два файла в файл .pem:

cat server.crt server.key > cert.pem
109
ответ дан simonwo 31 August 2018 в 20:05
поделиться

oneliner v2017:

centos:

openssl req -x509 -nodes -sha256 -newkey rsa:2048 \
-keyout localhost.key -out localhost.crt \
-days 3650 \
-subj "CN=localhost" \
-reqexts SAN -extensions SAN \
-config <(cat /etc/pki/tls/openssl.cnf <(printf "\n[SAN]\nsubjectAltName=IP:127.0.0.1,DNS:localhost"))

ubuntu:

openssl req -x509 -nodes -sha256 -newkey rsa:2048 \
-keyout localhost.key -out localhost.crt \
-days 3650 \
-subj "CN=localhost" \
-reqexts SAN -extensions SAN \
-config <(cat /etc/ssl/openssl.cnf <(printf "\n[SAN]\nsubjectAltName=IP:127.0.0.1,DNS:localhost"))
2
ответ дан user327843 31 August 2018 в 20:05
поделиться

Современные браузеры теперь вызывают ошибку безопасности для хорошо сформированных самозаверяющих сертификатов, если они не имеют SAN (Subject Alternate Name). OpenSSL не предоставляет способ командной строки для указания этого , поэтому многие обучающие программы и закладки разработчиков неожиданно устарели.

Самый быстрый способ снова запустить - это короткая, стоящая -alone conf file:

  1. Создать конфигурационный файл OpenSSL (пример: req.cnf)
    [req]
    distinguished_name = req_distinguished_name
    x509_extensions = v3_req
    prompt = no
    [req_distinguished_name]
    C = US
    ST = VA
    L = SomeCity
    O = MyCompany
    OU = MyDivision
    CN = www.company.com
    [v3_req]
    keyUsage = critical, digitalSignature, keyAgreement
    extendedKeyUsage = serverAuth
    subjectAltName = @alt_names
    [alt_names]
    DNS.1 = www.company.com
    DNS.2 = company.com
    DNS.3 = company.net
    
  2. Создать сертификат, ссылающийся на этот файл конфигурации
    openssl req -x509 -nodes -days 730 -newkey rsa:2048 \
     -keyout cert.key -out cert.pem -config req.cnf -sha256
    

Пример config из https://support.citrix.com/article/CTX135602

56
ответ дан vcsjones 31 August 2018 в 20:05
поделиться

Следующая команда:

openssl req -x509 -newkey rsa:4096 -sha256 -nodes -keyout example.key -out example.crt -subj "/CN=example.com" -days 3650

создает сертификат для домена example.com, который

  • относительно силен (по состоянию на 2018 год) и
  • , действительный для 3650 дней (~ 10 лет).

Он создает следующие файлы:

  • Закрытый ключ: example.key
  • Сертификат: example.crt

Поскольку вся информация предоставляется в командной строке, нет раздражающего интерактивного ввода. Кроме того, все эти шаги выполняются одним единственным вызовом OpenSSL: от создания секретного ключа до самозаверяющего сертификата.

Поскольку сертификат самоподписан и должен быть принят пользователями вручную,

В будущем вам может понадобиться больше, чем 4096 бит для ключа RSA и алгоритм хеширования, более сильный, чем sha256, но с 2018 года это нормальные значения.

Примечание: Теоретически вы можете оставить параметр -nodes (что означает «отсутствие шифрования DES»), в какой случай example.key будет зашифрован паролем. Тем не менее, это почти никогда не бывает полезно для установки сервера, потому что вам нужно будет либо хранить пароль на сервере, либо вам придется вводить его вручную при каждой перезагрузке.

113
ответ дан vog 31 August 2018 в 20:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: