На 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%%
Ще один крок - як зробити сертифікати самопідписаних сертифікатів повністю довіреними Chrome / Safari
Щоб дозволити авторизованим сертифікатам повністю довіряти Chrome і Safari, вам потрібно імпортувати новий сертифікат на ваш Mac. Для цього дотримуйтесь цих інструкцій або більш детальних інструкцій щодо цього загального процесу на веб-сайті mitmproxy :
Ви можете зробити це одним із двох способів у командному рядку, скориставшись цією командою, яка запропонує ввести пароль:
$ 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