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