ใน 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
แอพ:
- เปิดการเข้าถึง Keychain
- เลือก "ระบบ" ในรายการ "พวงกุญแจ"
- เลือก "ใบรับรอง" ในรายการ "หมวดหมู่"
- เลือก "ไฟล์ | นำเข้ารายการ ... "
- เรียกดูไฟล์ที่สร้างขึ้นด้านบน "rootCA.pem" เลือกไฟล์แล้วคลิก "เปิด"
- เลือกใบรับรองที่นำเข้าใหม่ของคุณในรายการ "ใบรับรอง"
- คลิกปุ่ม "i" หรือคลิกขวาที่ใบรับรองของคุณและเลือก "รับข้อมูล"
- ขยายตัวเลือก "ความน่าเชื่อถือ"
- เปลี่ยน "เมื่อใช้ใบรับรองนี้" เป็น "Always Trust"
- ปิดกล่องโต้ตอบและคุณจะได้รับพร้อมท์ให้ใส่รหัสผ่าน
- ปิดและเปิดแท็บใด ๆ ที่ใช้โดเมนเป้าหมายของคุณอีกครั้งและมันจะถูกโหลดอย่างปลอดภัย!
และเป็นโบนัสหากคุณต้องการไคลเอนต์ 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