Macでは、次のようにして、システムレベルでChromeとSafariによって完全に信頼される証明書を作成できます。
# create a root authority cert
./create_root_cert_and_key.sh
# create a wildcard cert for mysite.com
./create_certificate_for_domain.sh mysite.com
# or create a cert for www.mysite.com, no wildcards
./create_certificate_for_domain.sh www.mysite.com www.mysite.com
独自のルート認証局を使用して完全に信頼できる新しい自己署名証明書を作成する場合は、これらのスクリプトを使用して行うことができます。
create_root_cert_and_key.sh
#!/usr/bin/env bash
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem
create_certificate_for_domain.sh
#!/usr/bin/env bash
if [ -z "$1" ]
then
echo "Please supply a subdomain to create a certificate for";
echo "e.g. www.mysite.com"
exit;
fi
if [ ! -f rootCA.pem ]; then
echo 'Please run "create_root_cert_and_key.sh" first, and try again!'
exit;
fi
if [ ! -f v3.ext ]; then
echo 'Please download the "v3.ext" file and try again!'
exit;
fi
# Create a new private key if one doesnt exist, or use the xeisting one if it does
if [ -f device.key ]; then
KEY_OPT="-key"
else
KEY_OPT="-keyout"
fi
DOMAIN=$1
COMMON_NAME=${2:-*.$1}
SUBJECT="/C=CA/ST=None/L=NB/O=None/CN=$COMMON_NAME"
NUM_OF_DAYS=825
openssl req -new -newkey rsa:2048 -sha256 -nodes $KEY_OPT device.key -subj "$SUBJECT" -out device.csr
cat v3.ext | sed s/%%DOMAIN%%/"$COMMON_NAME"/g > /tmp/__v3.ext
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days $NUM_OF_DAYS -sha256 -extfile /tmp/__v3.ext
# move output files to final filenames
mv device.csr "$DOMAIN.csr"
cp device.crt "$DOMAIN.crt"
# remove temp file
rm -f device.crt;
echo
echo "###########################################################################"
echo Done!
echo "###########################################################################"
echo "To use these files on your server, simply copy both $DOMAIN.csr and"
echo "device.key to your webserver, and use like so (if Apache, for example)"
echo
echo " SSLCertificateFile /path_to_your_files/$DOMAIN.crt"
echo " SSLCertificateKeyFile /path_to_your_files/device.key"
v3.ext
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = %%DOMAIN%%
もう1つのステップ-自己署名証明書をChrome / Safariで完全に信頼できるようにする方法
自己署名証明書がChromeとSafariで完全に信頼されるようにするには、新しい認証局をMacにインポートする必要があります。これを行うには、次の手順、またはmitmproxy Webサイトにあるこの一般的なプロセスのより詳細な手順に従ってください。
これは、コマンドラインで次の2つの方法のいずれかで実行できます。このコマンドを使用すると、パスワードの入力を求められます。
$ sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain rootCA.pem
またはKeychain Access
アプリを使用して:
- キーチェーンアクセスを開く
- 「キーチェーン」リストで「システム」を選択します
- 「カテゴリ」リストから「証明書」を選択します
- 「ファイル|アイテムのインポート...」を選択します
- 上で作成したファイル「rootCA.pem」を参照して選択し、「開く」をクリックします
- 「証明書」リストで新しくインポートした証明書を選択します。
- 「i」ボタンをクリックするか、証明書を右クリックして、「情報を見る」を選択します
- 「信頼」オプションを展開します
- 「この証明書を使用する場合」を「常に信頼する」に変更
- ダイアログを閉じると、パスワードの入力を求められます。
- ターゲットドメインを使用しているすべてのタブを閉じて再度開くと、安全に読み込まれます。
おまけとして、Javaクライアントが証明書を信頼する必要がある場合は、証明書をJavaキーストアにインポートすることでそれを行うことができます。証明書がすでに存在する場合は、変更があった場合に更新する必要があるため、これによりキーストアから証明書が削除されます。もちろん、これはインポートされる証明書に対してのみ行われます。
import_certs_in_current_folder_into_java_keystore.sh
KEYSTORE="$(/usr/libexec/java_home)/jre/lib/security/cacerts";
function running_as_root()
{
if [ "$EUID" -ne 0 ]
then echo "NO"
exit
fi
echo "YES"
}
function import_certs_to_java_keystore
{
for crt in *.crt; do
echo prepping $crt
keytool -delete -storepass changeit -alias alias__${crt} -keystore $KEYSTORE;
keytool -import -file $crt -storepass changeit -noprompt --alias alias__${crt} -keystore $KEYSTORE
echo
done
}
if [ "$(running_as_root)" == "YES" ]
then
import_certs_to_java_keystore
else
echo "This script needs to be run as root!"
fi