Для людей, которые используют 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 определите здесь.
Вы можете сделать это с помощью одной команды:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365
Вы также можете добавить -nodes
, если вы не хотите защищать свой закрытый ключ парольной фразой, иначе он предложит вам " как минимум 4 символа ". Параметр days (365) можно заменить любым числом, чтобы повлиять на дату истечения срока действия. Затем он предложит вам такие вещи, как «Имя страны», но вы можете просто нажать «Ввести» и принять значения по умолчанию.
Добавить -subj '/CN=localhost'
, чтобы подавить вопросы о содержимом сертификата (замените localhost
на желаемый domain)
Самозаверяющие сертификаты не проверяются третьим лицом, если вы ранее не импортировали их в браузер. Если вам нужна дополнительная безопасность, вы должны использовать сертификат, подписанный CA.
Сгенерировать ключи
Я использую
/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
blockquote>[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';
В противном случае он отобразит ненулевую строку длины для используемого cypher:mysql> show status like 'Ssl_cipher'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | Ssl_cipher | | +---------------+-------+ 1 row in set (0.00 sec)
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-зашифрованные подключения для учетной записи.
Чтобы подключиться, клиент должен указать параметр -ssl-ca для проверки подлинности сертификата сервера и может дополнительно указать опции -ssl-key и -ssl-cert. Если не указан параметр --ssl-ca или опция -ssl-capath, клиент не проверяет подлинность сертификата сервера.GRANT ALL PRIVILEGES ON test.* TO 'root'@'localhost' REQUIRE SSL;
Альтернативная ссылка: Длительный учебник здесь http://www.madirish.net/214
Вот варианты, описанные в @ 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
Если этот параметр указан, то если создается закрытый ключ, он не будет зашифрован.
blockquote>Документация на самом деле больше подробно, чем выше, я просто подвел его здесь.
Это сценарий, который я использую в локальных блоках для установки 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), чтобы новый сертификат вступил в силу.
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, если это необходимо.
Я бы рекомендовал добавить параметр -sha256, чтобы использовать алгоритм хэша SHA-2, потому что основные браузеры рассматривают, чтобы показать «сертификаты SHA-1» как небезопасные.
То же командная строка из принятый ответ - @diegows с добавленным -sha256
openssl req -x509 -sha256 -newkey rsa: 2048 -keyout key.pem -out cert.pem -days XXX
blockquote >Дополнительная информация в блоге безопасности 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
У вас правильная процедура. Синтаксис команды ниже.
openssl req -new -key {private key file} -out {output file}
Однако предупреждения отображаются, потому что браузер не смог проверить идентификацию, подтвердив сертификат с помощью известного центра сертификации (CA).
Поскольку это самоподписанный сертификат, нет CA, и вы можете спокойно проигнорировать предупреждение и продолжить. Если вы хотите получить реальный сертификат, который будет распознан кем-либо в общедоступном Интернете, тогда процедура будет ниже.
У меня есть более подробная информация об этом в сообщении в https://bigthinkingapplied.com/secure-the-connection-installing-certificates-on-3- общий веб-сервера /
Один вкладыш 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"
Эта единственная команда содержит все ответы, которые вы обычно указали для деталей сертификата. Таким образом, вы можете установить параметры и запустить команду, получить свой результат - затем пойти на кофе.
Я не могу комментировать, поэтому поместим это как отдельный ответ. Я нашел несколько проблем с принятым однострочным ответом:
Вот упрощенная версия, которая удаляет кодовую фразу, повышает безопасность для подавления предупреждений и включает предложение в комментарии для передачи в -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
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"))
Современные браузеры теперь вызывают ошибку безопасности для хорошо сформированных самозаверяющих сертификатов, если они не имеют SAN (Subject Alternate Name). OpenSSL не предоставляет способ командной строки для указания этого , поэтому многие обучающие программы и закладки разработчиков неожиданно устарели.
Самый быстрый способ снова запустить - это короткая, стоящая -alone conf file:
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
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
Следующая команда:
openssl req -x509 -newkey rsa:4096 -sha256 -nodes -keyout example.key -out example.crt -subj "/CN=example.com" -days 3650
создает сертификат для домена example.com
, который
3650
дней (~ 10 лет). Он создает следующие файлы:
example.key
example.crt
Поскольку вся информация предоставляется в командной строке, нет раздражающего интерактивного ввода. Кроме того, все эти шаги выполняются одним единственным вызовом OpenSSL: от создания секретного ключа до самозаверяющего сертификата.
Поскольку сертификат самоподписан и должен быть принят пользователями вручную,
В будущем вам может понадобиться больше, чем 4096
бит для ключа RSA и алгоритм хеширования, более сильный, чем sha256
, но с 2018 года это нормальные значения.
Примечание: Теоретически вы можете оставить параметр -nodes
(что означает «отсутствие шифрования DES»), в какой случай example.key
будет зашифрован паролем. Тем не менее, это почти никогда не бывает полезно для установки сервера, потому что вам нужно будет либо хранить пароль на сервере, либо вам придется вводить его вручную при каждой перезагрузке.