GNU/Linux >> Linux の 問題 >  >> Linux

LetsEncryptからWebサーバー用の無料のCA署名付きSSL証明書を発行します

はじめに:
SSL証明書は、次の2つの機能を提供します。
1。認証
2。暗号化

暗号化は認証なしで実現できますが、何らかの理由で、誰かがそれらを1つの証明書に結合することにしました。適切に認証される必要のある銀行や本格的なeコマースサイトにとっては理にかなっているようです。したがって、HTTPSプロトコルが開発されたとき、暗号化することはできませんでした。HTTPのストリームのみです。この状況により、暗号化のみが必要な場合でも、証明書を取得するために証明書認証機関に依存することになりました。現在、https://letsencrypt.org/の天才グループは、URLを呼び出して特定の応答を期待することにより、簡単な認証検証を実行する証明書を取得する可能性を最終的に作成しました。 SSL証明書。したがって、システム管理者にとって、このような無料の証明書を要求してインストールするこのプロセスは非常に簡単になりました。これは、Debian / Ubuntu Webサーバーでこれを行う1つの方法です。
参照:http://www.admin-magazine.com/Articles/Getting-a-free-TLS-certificate-from-Let- s-Encrypt?utm_source =ADMIN + Newsletter&utm_campaign =ADMIN_Update_Free_Certificates_with_Let%27s_Encrypt_2016-20-07&utm_medium =email

手順:

LetsEncryptのインストール

apt-get update && apt-get install git
cd /usr/local/lib/
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto --email [email protected] --agree-tos --help
echo "export PATH=$PATH:/usr/local/lib/letsencrypt" >> /root/.bashrc
. /root/.bashrc

注: HTTPSを追加するWebサイトが既に構成されており、Webサーバーに存在することを確認してください。
理由は、証明書を要求するプロセス中に、LetsEncryptが追加のサブディレクトリ({htdocs} /)を作成するためです。 .well-known / acme-challenge /)およびサイトのhtdocs内の特別な一時ファイル(ApacheのDocumentRootディレクティブによって示される)は、LetsEncryptサーバーからサイト上のそのファイルを呼び出してURLを認証します。呼び出されたURLが無効な場合、証明書は発行されません。このため、サイトは稼働している必要があり、htdocsのパスを指定する必要があります。認証プロセスの後、一時ファイルは消去されますが、サブディレクトリは消去されません。空のままになります。

トラブルシューティング:

InsecurePlatformWarning
次のエラーメッセージが表示された場合、Debian Wheezyでは、SSlをPythonにインポートすることで解決できます。以下を参照してください。
InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
InsecurePlatformWarning

Python SSLサポートのインポート:
python
>>> import ssl
>>> (CTRL-D)

LetsEncryptクライアントプログラムのアップグレード

rm -rf /root/.local/share/letsencrypt
rm -rf /usr/local/lib/letsencrypt.old &>/dev/null
mv /usr/local/lib/letsencrypt /usr/local/lib/letsencrypt.old
cd /usr/local/lib/
git clone https://github.com/letsencrypt/letsencrypt

証明書のリクエスト

例えば。ドメインblog.mydomain.comの場合
注:最初のリクエスト時に、スクリプトは連絡目的の電子メールアドレスを指定するように求め、このツールの使用条件に同意するよう求めます。その後、これらの質問は行われません。
letsencrypt-auto certonly --webroot -w /www/clients/blog.mydomain.com/htdocs -d blog.mydomain.com
証明書とキーは/etc/letsencrypt/live/blog.mydomain.com/に保存されます as:
cert.pem : Certificate
chain.pem : CA Certificate
privkey.pem : Private key
fullchain.pem : Combination of the certificate and the CA Certificate

証明書を移動する代わりに、Apacheまたは他のWebサーバーを構成して、証明書ファイルが存在する場所を指すようにします。
このようにして、手動の介入なしに証明書を定期的に自動的に更新するcronジョブを作成できます。
証明書は90日間のみ有効です。例外はありません。
これは、オプション –renew-by-default を追加して、上記と同じコマンドを3か月ごとまたはそれ以前に実行する必要があることを意味します。 。
特定のドメインに要求できる証明書の制限は、現在5証明書/7日です。

単一の証明書の更新:

証明書を自動的に更新するには、cronジョブを使用し、オプション –デフォルトで更新を追加することをお勧めします。 コマンドで例えば。次のように:
letsencrypt-auto certonly --renew-by-default --webroot -w /www/clients/blog.mydomain.com/htdocs -d blog.mydomain.com

すべてを更新 インストールされたLetsencrypt証明書:

/usr/local/lib/letsencrypt/letsencrypt-auto renew
注: プロセスが成功したかどうかを確認するために、コマンドの出力を電子メールで送信することをお勧めします。

追加情報

LetsEncryptの証明書は、さまざまな方法で/ etc/letsencrypt/ディレクトリに保存されます。 「keys」および「csr」ディレクトリ内のファイルは特定の証明書を参照するように識別されていないため、これらのディレクトリ内の証明書、ファイル、またはシンボリックリンクを削除することはお勧めしません。そのため、同じ証明書に関連するファイルを削除するだけで、クライアントコマンドが混乱する可能性があり、それ以上の証明書を要求できなくなります。クライアントプログラムからのエラーメッセージは次のようなものです。
letsencrypt TypeError: coercing to Unicode: need string or buffer, NoneType found
その逆戻り点に到達した場合は、すべてのディレクトリを削除してください:アーカイブ csr キーライブ および更新 ただし、アカウントではありません 。次に、既存のサイトに対して証明書要求を再発行します。その後、証明書が更新され、新しい証明書をリクエストすることもできます。

主題の詳細については、以下を参照してください:
https://letsencrypt.readthedocs.org/en/latest/using.html

快適なスクリプト

証明書を発行できるようにし、80日後に自己更新したい場合は、このスクリプトが役立つ場合があります。
#!/bin/bash
# Purpose: Issue or renew a certificate from LetsEncrypt
# It will also issue an 'at'command which will be responsible to automatically renew the certificate automatically
# This script also issues a new at comand which will do the same in around 3 Months days depending on the settings here
# Syntax: cert_request.sh -s SITE_NAME -d SITE_HTDOCS
# Changes: 30.12.2015 First implementation of the script
# 10.01.2016 Took out the read of wpinstall.cfg config file. Added checks for the letsencrypt and at programs
#--------------------------------------------------------------
. /root/.bashrc
RENEW_DAYS="80"
# Absolute path to this script.
SCRIPT=$(readlink -f $0)
CERTS_DIR="/etc/letsencrypt/live"
# Absolute path this script is in.
scriptdir=$(dirname $SCRIPT)
encryptprgm="/usr/local/lib/letsencrypt/letsencrypt-auto"
atprgm="/usr/bin/at"
EMAIL="[email protected]"
#
# Check the syntax
function usage () {
echo "Usage: cert_request.sh -s SITE_NAME -d SITE_HTDOCS"
echo "-s SITE_NAME Full web site address WITHOUT the 'http://' eg.: www.myblog.com"
echo "-d SITE_HTDOCS The absolute path where WordPress will be installed. eg. /www/sites/www.mysite.com/htdocs"
exit 1
}
#
if [ $# -ne 4 ]; then
echo "ERROR: Wrong number of given argunents."
usage
fi
# Make sure the letsencrypt client prgm is installed
if ! [ -e $encryptprgm ] ; then
echo "ERROR: the letsencrypt program isn not installed. Install it and retry."
echo "See instructions at: //tipstricks.itmatrix.eu/install-new-and-signed-ssl-certificate-for-web-servers"
exit 1
fi
# Make sure the at is installed
if ! [ -e $atprgm ] ; then
echo "ERROR: the 'AT' program isn not installed. Install it and retry."
echo "apt-get install at"
exit 1
fi
# Everything look good so far. Lets start.
# get the command options
while getopts "s:d:" OPTION
do
case $OPTION in
s) SITE_NAME=$OPTARG
;;
d) SITE_HTDOCS=$OPTARG
;;
h|?|*)
echo "ERROR: argument(s) unknown."
usage
;;
esac
done
echo "Requesting certificate at LetsEncrypt"
# Does it exist already, then renew only, otherwise request renewing the cert
if [ -d $CERTS_DIR/${SITE_NAME} ] ; then
echo "The certificate already exists. Requesting a renewal"
RENEW="--renew-by-default"
else
RENEW=""
fi
#
if ($encryptprgm certonly $RENEW --webroot -w $SITE_HTDOCS -d ${SITE_NAME} &>/dev/null); then
# Enable the Apache SSL configuration and restart Apache
(echo "Certificate request successful."
echo "Issuing a renewal of the certificate in 80 days using 'at' command"
service apache2 restart
echo "$SCRIPT -s $SITE_NAME -d $SITE_HTDOCS" | $atprgm now + $RENEW_DAYS days)| tee /tmp/cert_request.sh.log \
| mail -s "Request/Renewal of Certificate for $SITE_NAME" [email protected]
echo -e "------- SITES LIST --------\n$(ls -1 /etc/apache2/sites-enabled/ | egrep -v '^00|^wptest1')\n\n--------- CERTIFICATES LIST ---------$(ls -l /etc/letsencrypt/live/ | cut -c29-)\n\n------- AT Jobs LIST -------\n$(/root/bin/atlist.sh)" | mail -s "Request/Renewal of Certificate request LIST" $EMAIL
cat /tmp/cert_request.sh.log
exit 0
else
(echo "ERROR: The certificate request/renewal FAILED.")| tee /tmp/cert_request.sh.log \
| mail -s "Request/Renewal of Certificate for $SITE_NAME" $EMAIL
cat /tmp/cert_request.sh.log
exit 2
fi

証明書のステータス

次の情報を表示する便利なスクリプトを次に示します。
–必要な時間に開始する準備ができているATジョブのリスト
–現在の証明書とそのファイルのタイムスタンプのリスト
以降letsencrypt は90日間のみ有効です。これにより、現在の証明書の古さの概要と、次に証明書の要求が行われるのはいつかがわかります。
#!/bin/bash
# Description: Displays all 'at' jobs and their respective commands
# Systax: atlist.sh
# Changes: 05.11.2016 First inplementation
########################################################################
# Get the short jobs list and expand from there
echo "================ AT Jobs ready to start at the required times ==============="
atq | while read line ; do
jobnr=$(echo $line | awk '{print $1}')
echo $line
# Pickup all the command lines after first line matching '}'.
# This excludes all the environment variables and the at exit line.
# Exclude the matching '}' line and empty lines
# Add an offset of 8 chars to each command line.
# at -c $jobnr | grep -A100 -m1 -e '^\}' | grep -v '^\}' | sed -e '/^$/d' -e 's/^/ /'
at -c $jobnr | at -c $jobnr | sed -e '1,/^\}/d' -e '/^$/d' -e 's/^/ /'
done
echo ; echo
echo "=============== Age of present certificates ====================="
ls -l /etc/letsencrypt/live/*/cert.pem | awk '{print $6" "$7" "$8" "$9}' | sed -e 's|/etc/letsencrypt/live/||' -e 's|/cert.pem||'

CERBOTのインストールと使用

はじめに:
Cerbotツールは、上記のLestencryptオリジナルにユーザーフレンドリーな機能を追加するだけです。
詳細については、次のサイトを参照してください:
https://certbot.eff.org/docs/install.html

使用:
Letsencrypサーバーに証明書を要求したり、一時的なWebサーバーを作成して、証明書が要求されたサイトのHTTP接続を確認したりすることもできます。これらの機能は、コマンドラインにオプションを追加するだけで呼び出すことができます。
例:WebサイトをSSLのみにする場合、通常、HTTP仮想ホストはHTTPリクエストに対して自動的にHTTPSへのリダイレクトを行います。この場合、LetsencryptサーバーからのWebサイトの検証をブロックします。この問題を回避するために私が知っている2つの方法があります。
1)URIが/.well-known/…..
の場合、HTTPSにリダイレクトしないApacheのリダイレクトディレクティブに条件を作成します。長所:Webサーバーのダウンタイムはありません
短所:SSLサイトごとにリダイレクトディレクティブの追加条件を実行する必要があります。
2)Webサーバーを停止します。 –standaloneオプションを指定してcerbotを実行します。 Webサーバーを再起動します。
このソリューションは、サイトでダウンタイムを発生させたくない場合にのみ、Webサーバークラスター環境に適しています。
長所:サイトに追加のリダイレクト条件は必要ありません。リダイレクト条件を作成するのが難しいNginxサーバーに非常に適しています
短所:証明書の作成/更新が必要なサイトが多数ある場合、この手順中にサイトのダウンタイムが長く続く可能性があります。

インストール:
wget https://dl.eff.org/certbot-auto
chmod a+x ./certbot-auto

または、Ubuntu 16.04以降を使用している場合は、次のコマンドもインストールに適しています。
apt-get install certbot python-certbot-apache
次に、「certbot」に関するヘルプを取得します
certbot --help
certbot」の例 '認証に独自のWebサーバーを使用するコマンド。これにより、認証プロセスでApache / NginXに干渉する必要がなくなります。
次の例では、これら4つのサブドメインで有効な単一の証明書を要求します。 (SAN)メカニズム。
certbot certonly --standalone -d www.mydomain.com -d www.mydomain2.com -d mailman.mydomain.com -d mail.mydomain.com
この上記の例では、Apache / NginXがポート80を使用していないことを確認する必要があります。使用している場合は、このコマンドの前にWebサーバーをシャットダウンし、直後に再起動します。これにより、Webアクセスのダウンタイムが短くなります。このダウンタイムは、ロードバランサーの背後にWebサーバーがあるか、Webサービスがそのようなダウンタイムを許可できるかによって許容される場合があります。
例:
service apache2 stop
certbot certonly --standalone -d www.mydomain.com -d www.mydomain2.com -d mailman.mydomain.com -d mail.mydomain.com
service apache2 start


Linux
  1. CentOSWebパネルでホスト名のSSL証明書を設定する

  2. Apache の SSL キー、CSR、および自己署名証明書を生成する方法

  3. CLI および PHP コードから Curl TLS SSL プロトコルの問題を修正する方法

  1. Let'sEncryptによるCentos上のNginxの無料SSL

  2. malloc と free のコード

  3. 利用可能なすべての ssl ca 証明書を一覧表示する

  1. CSRキーを生成してCWPからSSL証明書をインストールする方法は?

  2. SSL証明書のcPanelでキーとCSRを生成する方法

  3. SSL証明書ブラウザエラー