Некоторое время назад я задумался о покупке сервера и увидел, что в одном облаке есть сервис быстрых денег 99. Новые и старые пользователи всегда могут купить серверы по этой цене, https://www.aliyun.com/. minisite/goods?userCode=c0ngnrad, поэтому я купил сервер, затем развернул различное программное обеспечение и, наконец, настроил SSL-сертификат доменного имени с использованием acme.sh, успешно завершил развертывание моего блога, поэтому я запишу процесс для вашего. ссылка! Let's Encrypt — бесплатные сертификаты SSL/TLS (letsencrypt.org)
acme.sh Осуществленный acme
протокол, Можно получить из letsencrypt Создавайте бесплатные сертификаты.
Основные шаги:
Подробное введение ниже.
Установка проста, всего одна команда:
curl https://get.acme.sh | sh -s email=my@example.com
Его могут установить и использовать как обычные пользователи, так и пользователи root. Процесс установки включает в себя следующие шаги:
~/.acme.sh/
и создать один shell из alias, Например .bashrc, удобный для вас изиспользовать: alias acme.sh=~/.acme.sh/acme.sh
Дополнительные возможности установки см. на странице https://github.com/Neilpang/acme.sh/wiki/How-to-install.
Процесс установки не затронет какие-либо функции и файлы существующей системы., Все изменения ограничены каталогом «Установить»: ~/.acme.sh/
acme.sh Осуществленный acme Протокол поддерживает все протоколы проверки. Обычно существует два способа проверки: http и dns проверять.
acme.sh --issue -d mydomain.com -d www.mydomain.com --webroot /home/wwwroot/mydomain.com/
Просто укажите доменное имя, И укажите корневой каталог извеб-сайта, в котором находится доменное имя. acme.sh Файлы проверки будут созданы автоматически. И поместите его в корневой каталог веб-сайтиз, Затем автоматически завершится проверка. Наконец, будет разумно удалить файл проверки. Весь процесс не имеет побочных эффектов.
Если вы используете из apacheсервер, acme.sh Его также можно использовать разумно из apacheиз Конфигурация Автоматически завершать проверку в, Корневой каталог сайта указывать не нужно:
acme.sh --issue -d mydomain.com --apache
Если вы используете из nginxсервер, Или контрпоколение, acme.sh Его также можно использовать разумно из nginxиз Конфигурация Автоматически завершать проверку в, Корневой каталог сайта указывать не нужно:
acme.sh --issue -d mydomain.com --nginx
Уведомление, Или apache все еще nginx модель, После того как acme.sh завершит проверку, будет восстановлено в прежнее состояние, Вы не измените себя без разрешения. Преимущество состоит в том, что вам не нужно беспокоиться о повреждении конфигурации. Есть и недостатки, Вам нужно настроить его самостоятельно ssl из Конфигурация, В противном случае сертификат можно будет успешно сгенерировать только Вы извеб-сайтвсе еще Невозможно получить доступ к https. Но в целях безопасности, ты все еще Собственный Руководствоизменять Конфигурация Бар.
Если вы не запускали ни одного web Служить, 80 порт простаивает, Так acme.sh Вы также можете притвориться одним веб-сервером, Слушайте временно80 порт, Полная проверка:
acme.sh --issue -d mydomain.com --standalone
Для более продвинутого использования обратитесь к: https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert.
Преимущество этого метода в том, что Вам не нужен никакой сервер, Нет необходимости в общедоступной сети ip, Просто нужно dns проанализировать запись для завершения проверки. Недостатком является то, что если не настроить одновременно Automatic DNS API, используйте этот способ acme.sh Сертификат не будет обновляться автоматически, и вам придется каждый раз вручную повторно анализировать и подтверждать право собственности на доменное имя.
acme.sh --issue --dns -d mydomain.com \
--yes-I-know-dns-manual-mode-enough-go-ahead-please
Затем, acme.sh Соответствующие записи синтаксического анализа будут созданы и отображены. ты Просто нужно Добавить это в панели управления доменными именами txt Просто запишите это.
Дождавшись завершения анализа, перегенерируйте сертификат:
acme.sh --renew -d mydomain.com \
--yes-I-know-dns-manual-mode-enough-go-ahead-please
Обратите внимание, второй раз Здесь использовано слово из --renew
dns Реальная сила этого метода заключается в том, что его могут предоставить поставщики разрешения доменных имен. api Автоматически добавлено txt Запись завершена проверьте.
acme.sh В настоящее время поддерживается cloudflare, dnspod, cloudxns, godaddy а также ovh Автоматически интегрируются десятки других поставщиков аналитических услуг.
к dnspod Например, Сначала вам нужно войти в систему dnspod счет, Создать тебя из api id и api key, Все бесплатно. Затем:
export DP_Id="1234"
export DP_Key="sADDsdasdgdsf"
acme.sh --issue --dns dns_dp -d aa.com -d www.aa.com
Сертификат будет сгенерирован автоматически. Здесь дано из api id и api key будет автоматически записано, В будущем вы будете использовать dnspod api из времени, Нет необходимости указывать его еще раз. Просто сгенерируйте его напрямую:
acme.sh --issue -d mydomain2.com --dns dns_dp
Подробнееиз api использование: https://github.com/Neilpang/acme.sh/blob/master/dnsapi/README.md
После того, как предыдущий Сертификат будет сгенерирован, Далее вам необходимо отдать копию сертификата туда, где он вам действительно нужен.
Уведомление, Созданный по умолчанию из Сертификат помещается в Установить В. каталоге: ~/.acme.sh/
, Пожалуйста, не используйте файлы в этом каталоге напрямую. Например: Не давайте это напрямую nginx/apache из файла конфигурации используйте приведенный ниже файл. Все файлы здесь являются внутренними, И структура каталогов может измениться.
правильныйизиспользовать Методиспользовать --install-cert
команду и укажите целевое местоположение, Затем файл Сертификата будет скопирован в соответствующее место. Например:
acme.sh --install-cert -d example.com \
--cert-file /path/to/certfile/in/apache/cert.pem \
--key-file /path/to/keyfile/in/apache/cert.key \
--fullchain-file /path/to/fullchain/certfile/apache/fullchain.pem \
--reloadcmd "service apache2 force-reload"
acme.sh --install-cert -d example.com \
--key-file /path/to/keyfile/in/nginx/key.pem \
--fullchain-file /path/to/fullchain/nginx/cert.pem \
--reloadcmd "service nginx force-reload"
(одно маленькое напоминание, Здесь использовано слово из service nginx force-reload
, нет service nginx reload
, По данным тестирования, reload
Сертификат не будет перезагружен, Местокиспользоватьиз force-reload
)
Nginx из Конфигурация ssl_certificate
использовать /etc/nginx/ssl/fullchain.cer
, скорее, чем /etc/nginx/ssl/<domain>.cer
,в противном случае SSL Labs из Отчет об испытаниях Chain issues Incomplete
ошибка.
--install-cert
Команда можеткнесет в себе множество параметров, чтобы указать целевой файл. и можно указать reloadcmd,когда Сертификатвозобновлятькназад, reloadcmd будет вызван автоматически, чтобы сервер вступил в силу.
Подробные параметры см. по адресу: https://github.com/Neilpang/acme.sh#3-install-the-issued-cert-to-apachenginx-etc.
Стоит отметить, что, Все указанные здесь параметры будут автоматически записано, И в дальнейшем Сертификат автоматически возобновляется, автоматически вызывается снова.
acme.sh --info -d example.com
# Будет выведен следующий контент:
DOMAIN_CONF=/root/.acme.sh/example.com/example.com.conf
Le_Domain=example.com
Le_Alt=no
Le_Webroot=dns_ali
Le_PreHook=
Le_PostHook=
Le_RenewHook=
Le_API=https://acme-v02.api.letsencrypt.org/directory
Le_Keylength=
Le_OrderFinalize=https://acme-v02.api.letsencrypt.org/acme/finalize/23xxxx150/781xxxx4310
Le_LinkOrder=https://acme-v02.api.letsencrypt.org/acme/order/233xxx150/781xxxx4310
Le_LinkCert=https://acme-v02.api.letsencrypt.org/acme/cert/04cbd28xxxxxx349ecaea8d07
Le_CertCreateTime=1649358725
Le_CertCreateTimeStr=Thu Apr 7 19:12:05 UTC 2022
Le_NextRenewTimeStr=Mon Jun 6 19:12:05 UTC 2022
Le_NextRenewTime=1654456325
Le_RealCertPath=
Le_RealCACertPath=
Le_RealKeyPath=/etc/acme/example.com/privkey.pem
Le_ReloadCmd=service nginx force-reload
Le_RealFullChainPath=/etc/acme/example.com/chain.pem
Выполнение завершено 3 После этого шага, как и ожидалось, вы найдете каталог ниже. /path/to/keyfile/in/nginx/
создать два файла key.pem
и cert.pem
один — файл сертификата, один файл ключа.
Откройте nginx.conf или отдельный файл конфигурации, добавьте следующий контент:
server {
#HTTPSиз порта доступа по умолчанию 443.
#Если КонфигурацияHTTPSиз здесь не имеет доступа к порту по умолчанию, это может привести к сбою запуска Nginx.
listen 443 ssl;
#Заполните привязку Сертификата от доменного имени
server_name example.com; # Вам необходимо выбрать доменное имя. Конфигурация на основе вашего фактического доменного имени.
#Заполните абсолютный путь к файлу Сертификата
ssl_certificate "/path/to/keyfile/in/nginx/cert.pem";
#Заполните абсолютный путь к файлу закрытого ключа Сертификата
ssl_certificate_key "/path/to/keyfile/in/nginx/key.pem";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
#Пользовательские настройкииспользоватьизпротокола TLS из Типа также набор шифров (ниже приведен пример конфигурации, пожалуйста, оцените, нужна ли вам конфигурация)
#Чем выше версия протокола TLS, тем выше безопасность связи HTTPS. Однако по сравнению с более ранней версией протокола TLS более высокая версия протокола TLS менее совместима с браузерами.
#ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
#ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
# указывает приоритет использования набора шифров на стороне сервера. Включено по умолчанию
ssl_prefer_server_ciphers on;
root /wwwroot/example.com;
access_log /var/log/nginx/example_com_access.log;
error_log /var/log/nginx/example_com_error.log;
location / {
#root html;
index index.html index.htm;
}
}
Настройка завершена, выполнить команду nginx -s reload
Перезапуск nginx Вот и все.
Сертификат в настоящее время находится в 60 Через 10 дней он автоматически возобновится, Никаких действий с вашей стороны не требуется. В будущем это время может быть сокращено. Но они все автоматические, Вам не нужно заботиться.
пожалуйста, убедитесь cronjob Установлен правильно, Это выглядит примерно такиз:
crontab -l
56 * * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
глаз Предварительное условиеизменятьReloadCmd
нет специализированногоиз Заказ,Можеткпо ре Установить Сертификатреализовать ремонтизменятьreloadCmd
изглазиз。 также,Установить Сертификатназад,Соответствующая информация хранится в~/.acme.sh/example.com/example.conf
в файлахиз,Содержаниеacme.sh --info -d example.com
выходизинформация,ноReloadCmd
в файлеиспользовать ПонятноBase64кодирование。Теоретически Можеткпутем прямого ремонтаизменять Должендокумент Посещение школыизменятьReloadCmd
,и при изменении,Нет необходимости в кодировке Base64.,Пишите напрямую Заказоригинальныйacme.sh
также Можеткидентифицировать。 но,example.conf
документиз Расположениеи Формат контентакназад Может Можетизменять Изменять!example.conf
всегда внутреннийиспользовать, Вместо этого его можно использовать позже sqlite или MySQL Форматирование хранилища. Поэтому, как правило, не рекомендуется изменять его самостоятельно.
В настоящее время из-за acme Соглашение letsencrypt CA часты извозобновлять, поэтому acme.sh Также часто следите за синхронизацией возобновления.
Обновите acme.sh до последней версии:
acme.sh --upgrade
Если вы не хотите обновляться вручную, Можетк Включить автоматическийобновление:
acme.sh --upgrade --auto-upgrade
После этого acme.sh будет автоматически обновляться.
Вы также можете в любой момент отключить автоматическое возобновление:
acme.sh --upgrade --auto-upgrade 0
Если что-то пойдет не так, добавьте журнал отладки:
acme.sh --issue ..... --debug
или:
acme.sh --issue ..... --debug 2
Пожалуйста, обратитесь к: https://github.com/Neilpang/acme.sh/wiki/How-to-debug-acme.sh.
Если в режиме проверки DNS в отладке появляются такие слова, как «время ожидания», это может быть связано с тем, что GFWbreak сломал соответствующий запрос, и вам необходимо добавить переменную среды прокси-сервера http(s). (Пожалуйста, измените в соответствии с вашими фактическими настройками)
export http_proxy="socks5h://localhost:1081" && export https_proxy="socks5h://localhost:1081"
Если используется Docker, полный пример конфигурации выглядит следующим образом:
docker run --rm -it \
-v "/etc/acme":/acme.sh \
-e "CF_Token=[введите свою информацию]" \
-e "CF_Account_ID=[введите свою информацию]" \
-e "CF_Zone_ID=[введите свою информацию]" \
-e http_proxy="socks5h://[Прокси A]:1234" \
-e https_proxy="socks5h://[Прокси A]:1234" \
--network контейнер:[Агент А]\
neilpang/acme.sh \
--issue -d example.com --dns dns_cf --debug
В приведенном выше примере используйте CloudflareизDNS для выдачи сертификата.,и ссылку на контейнер [Агент А] через Пучокacme.sh,Для пересылки запросов на завивку (пожалуйста, измените их в соответствии с вашими фактическими настройками)
наконец, Эта статья не является полным объяснением, Есть также много расширенных функций, Для более продвинутого использования из см. другие wiki страница.
https://github.com/Neilpang/acme.sh/wiki
После успешного развертывания вы можете скачать его в браузере. https Просмотрите свой веб-сайт. Если на веб-странице нет вывода или не удается найти сообщение об ошибке. Если вы покупаете новый облачный сервис, вам необходимо разработать соответствующий сервер на своем сервере. ssl порт 443 . Например, Alibaba Cloud:
Таким образом, вы можете с удовольствием играть в облаке.