REM ################################################################## REM # REM # openssl 인증서 생성 REM # REM ################################################################## @ECHO OFF CHCP 65001 1> NUL 2> NUL SET "CERT_NAME=https_cert" SET "DOMAIN_NAME=apache.org" SET "COMMON_NAME=apache-httpd" SET "COMPANY_NAME= Apache Software Foundation" SET "DEFAULT_DAYS=36500" DEL *.cnf DEL *.crt DEL *.csr DEL *.key DEL *.orig CLS ECHO ########################################################################### ECHO # ECHO # openssl.cnf 파일 쓰기 ECHO # ECHO ########################################################################### ECHO [ req ]> rootca_openssl.cnf ECHO default_bits = 2048>> rootca_openssl.cnf ECHO default_md = sha256>> rootca_openssl.cnf ECHO default_keyfile = %CERT_NAME%_private.key>> rootca_openssl.cnf ECHO distinguished_name = req_distinguished_name>> rootca_openssl.cnf ECHO extensions = v3_ca>> rootca_openssl.cnf ECHO req_extensions = v3_ca>> rootca_openssl.cnf ECHO.>> rootca_openssl.cnf ECHO [ v3_ca ]>> rootca_openssl.cnf ECHO basicConstraints = critical, CA:TRUE, pathlen:0>> rootca_openssl.cnf ECHO subjectKeyIdentifier = hash>> rootca_openssl.cnf ECHO ##authorityKeyIdentifier = keyid:always, issuer:always>> rootca_openssl.cnf ECHO keyUsage = keyCertSign, cRLSign>> rootca_openssl.cnf ECHO nsCertType = sslCA, emailCA, objCA>> rootca_openssl.cnf ECHO.>> rootca_openssl.cnf ECHO [req_distinguished_name ]>> rootca_openssl.cnf ECHO countryName = KR>> rootca_openssl.cnf ECHO countryName_default = KR>> rootca_openssl.cnf ECHO countryName_min = 2 >> rootca_openssl.cnf ECHO countryName_max = 2 >> rootca_openssl.cnf ECHO.>> rootca_openssl.cnf ECHO # 회사명 입력>> rootca_openssl.cnf ECHO organizationName = %COMPANY_NAME%>> rootca_openssl.cnf ECHO organizationName_default = %COMPANY_NAME%>> rootca_openssl.cnf ECHO.>> rootca_openssl.cnf ECHO # 부서 입력>> rootca_openssl.cnf ECHO organizationalUnitName = %COMPANY_NAME%>> rootca_openssl.cnf ECHO organizationalUnitName_default = %COMPANY_NAME%>> rootca_openssl.cnf ECHO.>> rootca_openssl.cnf ECHO # SSL 서비스할 domain 명 입력>> rootca_openssl.cnf ECHO commonName = %COMMON_NAME%>> rootca_openssl.cnf ECHO commonName_default = %COMMON_NAME%>> rootca_openssl.cnf ECHO commonName_max = 64>> rootca_openssl.cnf ECHO [ req ]> server_openssl.cnf ECHO default_bits = 2048>> server_openssl.cnf ECHO default_md = sha1>> server_openssl.cnf ECHO default_keyfile = %COMPANY_NAME%-rootca.key>> server_openssl.cnf ECHO distinguished_name = req_distinguished_name>> server_openssl.cnf ECHO extensions = v3_user>> server_openssl.cnf ECHO.>> server_openssl.cnf ECHO [ v3_user ]>> server_openssl.cnf ECHO # Extensions to add to a certificate request>> server_openssl.cnf ECHO basicConstraints = CA:FALSE>> server_openssl.cnf ECHO authorityKeyIdentifier = keyid,issuer>> server_openssl.cnf ECHO subjectKeyIdentifier = hash>> server_openssl.cnf ECHO keyUsage = nonRepudiation, digitalSignature, keyEncipherment>> server_openssl.cnf ECHO ## SSL 용 확장키 필드>> server_openssl.cnf ECHO extendedKeyUsage = serverAuth,clientAuth>> server_openssl.cnf ECHO subjectAltName = @alt_names>> server_openssl.cnf ECHO.>> server_openssl.cnf ECHO [ alt_names]>> server_openssl.cnf ECHO ## Subject AltName의 DNSName field에 SSL Host 의 도메인 이름을 적어준다.>> server_openssl.cnf ECHO ## 멀티 도메인일 경우 *.%COMPANY_NAME%.com 처럼 쓸 수 있다.>> server_openssl.cnf ECHO DNS.1 = %COMMON_NAME%>> server_openssl.cnf ECHO DNS.2 = *.%DOMAIN_NAME%>> server_openssl.cnf ECHO.>> server_openssl.cnf ECHO [req_distinguished_name ]>> server_openssl.cnf ECHO countryName = KR>> server_openssl.cnf ECHO countryName_default = KR>> server_openssl.cnf ECHO countryName_min = 2 >> server_openssl.cnf ECHO countryName_max = 2 >> server_openssl.cnf ECHO.>> server_openssl.cnf ECHO # 회사명 입력>> server_openssl.cnf ECHO organizationName = %COMPANY_NAME%>> server_openssl.cnf ECHO organizationName_default = %COMPANY_NAME%>> server_openssl.cnf ECHO.>> server_openssl.cnf ECHO # 부서 입력>> server_openssl.cnf ECHO organizationalUnitName = %COMPANY_NAME%>> server_openssl.cnf ECHO organizationalUnitName_default = %COMPANY_NAME%>> server_openssl.cnf ECHO.>> server_openssl.cnf ECHO # SSL 서비스할 domain 명 입력>> server_openssl.cnf ECHO commonName = %COMMON_NAME%>> server_openssl.cnf ECHO commonName_default = %COMMON_NAME%>> server_openssl.cnf ECHO commonName_max = 64>> server_openssl.cnf CLS ECHO ########################################################################### ECHO # ECHO # rootCA 인증서 만들기 ECHO # ECHO ########################################################################### ECHO. ECHO ########################################################################### ECHO Step 1: [RootCA Cert] Private 키를 만든다. ECHO ########################################################################### ECHO openssl genrsa -aes256 -out %CERT_NAME%_rootca.key 2048 openssl genrsa -aes256 -out %CERT_NAME%_rootca.key 2048 PAUSE CLS ECHO. ECHO ########################################################################### ECHO Step 2: [RootCA Cert] 인증요청서(Certificate Signing Request) 생성 ECHO ########################################################################### ECHO openssl req -new -config rootca_openssl.cnf -key %CERT_NAME%_rootca.key -out %CERT_NAME%_rootca.csr openssl req -new -config rootca_openssl.cnf -key %CERT_NAME%_rootca.key -out %CERT_NAME%_rootca.csr PAUSE CLS ECHO. ECHO ########################################################################### ECHO Step 3: [RootCA Cert] 개인키의 비밀번호 제거 ECHO ########################################################################### COPY /V %CERT_NAME%_rootca.key %CERT_NAME%_rootca.key.orig ECHO openssl rsa -in %CERT_NAME%_rootca.key.orig -out %CERT_NAME%_rootca.key openssl rsa -in %CERT_NAME%_rootca.key.orig -out %CERT_NAME%_rootca.key PAUSE CLS ECHO. ECHO ########################################################################### ECHO Step 4: [RootCA Cert] 인증서(Certificate) 생성 ECHO ########################################################################### ECHO openssl x509 -req -days %DEFAULT_DAYS% -extensions v3_ca -set_serial 1 -extfile rootca_openssl.cnf -in %CERT_NAME%_rootca.csr -signkey %CERT_NAME%_rootca.key -out %CERT_NAME%_rootca.crt openssl x509 -req -days %DEFAULT_DAYS% -extensions v3_ca -set_serial 1 -extfile rootca_openssl.cnf -in %CERT_NAME%_rootca.csr -signkey %CERT_NAME%_rootca.key -out %CERT_NAME%_rootca.crt PAUSE CLS ECHO. ECHO ########################################################################### ECHO Step 5: [RootCA Cert] 확인 ECHO ########################################################################### openssl x509 -text -in %CERT_NAME%_rootca.crt CLS ECHO ########################################################################### ECHO # ECHO # rootCA를 기준으로 한 Server SSL 인증서 만들기 ECHO # ECHO ########################################################################### ECHO. ECHO ########################################################################### ECHO Step 1: [SSL Cert] Private 키를 만든다. ECHO ########################################################################### openssl genrsa -aes256 -out %CERT_NAME%_server_private.key 2048 CLS ECHO. ECHO ########################################################################### ECHO Step 2: [SSL Cert] 인증요청서(Certificate Signing Request) 생성 ECHO ########################################################################### openssl req -new -config server_openssl.cnf -key %CERT_NAME%_server_private.key -out %CERT_NAME%_server.csr CLS ECHO. ECHO ########################################################################### ECHO Step 3: [SSL Cert] 개인키의 비밀번호 제거 ECHO ########################################################################### COPY /V %CERT_NAME%_server_private.key %CERT_NAME%_server_private.key.orig openssl rsa -in %CERT_NAME%_server_private.key.orig -out %CERT_NAME%_server_private.key CLS ECHO. ECHO ########################################################################### ECHO Step 4: [SSL Cert] 인증서(Certificate) 생성 ECHO ########################################################################### openssl x509 -req -set_serial 01 -days %DEFAULT_DAYS% -extensions v3_user -extfile server_openssl.cnf -in %CERT_NAME%_server.csr -CA %CERT_NAME%_rootca.crt -CAcreateserial -CAkey %CERT_NAME%_rootca.key -out %CERT_NAME%_server.crt CLS ECHO. ECHO ########################################################################### ECHO Step 5: [SSL Cert] 확인 ECHO ########################################################################### openssl x509 -text -in %CERT_NAME%_server.crt PAUSE