web·was

OpenSSL 로 RootCA 및 인증서 아파치 생성 및 적용

초이짬 2020. 11. 24. 19:48
728x90

일단 일반 openssl 적용은 많이 있고 openssl 을 그냥 적용하면 항상 신뢰하지 않는 사이트 접근에 대해서 브라우저가 뱉어 낸다. IE 같은 경우는 내 기억에 신뢰할수 있는 사이트에 추가 해주면 되었던거 같았는데 이번에 테스트 때문에 해보니 추가해도 안된다 그리고 크롬은 아예 그런게 없고 그래서 openssl 로 만든 인증서를 rootCA 까지 만들어서 적용하니 크롬과 IE 다 인증서를 정상 인식 하고 작동에 문제가 없었다. 물론 테스트 용이고 실재는 인증서를 돈받고 발급 받던지 아니면 해당 인증키를 내려받아서 인증할수 있게 하던지 하면 되겟다

www.lesstif.com/system-admin/openssl-root-ca-ssl-6979614.html자료를 참조햇다

일단 centos 7 기준으로 rootca 를 먼저 생성한다

==ca용 rsa 키 생성

openssl genrsa -aes256 -out /etc/pki/tls/private/lesstif-rootca.key 2048

==csr 생성용 conf 제작

vi rootca_openssl.conf

[ req ]
default_bits            = 2048
default_md              = sha1
default_keyfile         = lesstif-rootca.key
distinguished_name      = req_distinguished_name
extensions             = v3_ca
req_extensions = v3_ca
[ v3_ca ]
basicConstraints       = critical, CA:TRUE, pathlen:0
subjectKeyIdentifier   = hash
##authorityKeyIdentifier = keyid:always, issuer:always
keyUsage               = keyCertSign, cRLSign
nsCertType             = sslCA, emailCA, objCA
[req_distinguished_name ]
countryName                     = Country Name (2 letter code)
countryName_default             = KR
countryName_min                 = 2
countryName_max                 = 2
# 회사명 입력
organizationName              = [회사명]
organizationName_default      = [회사명 기본]
# 부서 입력
#organizationalUnitName          = R&D
#organizationalUnitName_default  = Condor Project
# SSL 서비스할 domain 명 입력
commonName                      = [도메인]
commonName_default              = ex)lesstif's Self Signed CA[인증발급기관명]
commonName_max                  = 64 

설정 파일 만들고 키를 csr 로 변경

openssl req -new -key /etc/pki/tls/private/lesstif-rootca.key -out /etc/pki/tls/certs/lesstif-rootca.csr -config rootca_openssl.conf

하면 해당 설정파일이 먹으면서 확인만 하면 된다 엔터키로 중간에 비밀번호 생성도 나오면 이력하면된다

openssl x509 -req \
-days 3650 \
-extensions v3_ca \
-set_serial 1 \
-in /etc/pki/tls/certs/lesstif-rootca.csr \
-signkey /etc/pki/tls/private/lesstif-rootca.key \
-out /etc/pki/tls/certs/lesstif-rootca.crt \
-extfile rootca_openssl.conf

인증서 확인

openssl x509 -text -in /etc/pki/tls/certs/lesstif-rootca.crt

이걸로 rootCA 인증서는 생성 되었다

이제는 호스트에서 사용할 인증서를 만든다

openssl genrsa -aes256 -out /etc/pki/tls/private/lesstif.com.key 2048

키 생성하면 비번을 넣는데 이게 서버에 적용되면 서버 구동때마다 비번 물어보고 까먹으면 재발급해야 되니

안묻는 걸로 아래와 같이 처리한다

cp /etc/pki/tls/private/lesstif.com.key /etc/pki/tls/private/lesstif.com.key.enc
openssl rsa -in /etc/pki/tls/private/lesstif.com.key.enc -out /etc/pki/tls/private/lesstif.com.key

csr 파일 생성용 conf 만든다.

vi host_openssl.conf

[ req ]
default_bits            = 2048
default_md              = sha1
default_keyfile         = lesstif-rootca.key
distinguished_name      = req_distinguished_name
extensions             = v3_user
[ v3_user ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
authorityKeyIdentifier = keyid,issuer
subjectKeyIdentifier = hash
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
## SSL 용 확장키 필드
extendedKeyUsage = serverAuth,clientAuth
subjectAltName          = @alt_names
[ alt_names]
## Subject AltName의 DNSName field에 SSL Host 의 도메인 이름을 적어준다.
## 멀티 도메인일 경우 *.lesstif.com 처럼 쓸 수 있다.
DNS.1   = [1차 도메인] ex) www.test.kr
DNS.2   = [2차 도메인] ex) *.test.kr
[req_distinguished_name ]
countryName                     = Country Name (2 letter code)
countryName_default             = KR
countryName_min                 = 2
countryName_max                 = 2
# 회사명 입력
organizationName              = [회사명]
organizationName_default      = [기본 회사명]
# 부서 입력
organizationalUnitName          = R&D
organizationalUnitName_default  = lesstif SSL Project
# SSL 서비스할 domain 명 입력
commonName                      = [서비스할 도메인 호스트] ex) www.test.kr
commonName_default             = [서비스할 기본 도메인 호스트] ex) www.test.kr 내 경운 위와 동일하게 줫음
commonName_max                  = 64

작성하고 rootCA 와 마찬가지로 생성

openssl req -new -key /etc/pki/tls/private/lesstif.com.key -out /etc/pki/tls/certs/lesstif.com.csr -config host_openssl.conf

openssl x509 -req -days 1825 -extensions v3_user -in /etc/pki/tls/certs/lesstif.com.csr \
-CA /etc/pki/tls/certs/lesstif-rootca.crt -CAcreateserial \
-CAkey  /etc/pki/tls/private/lesstif-rootca.key \
-out /etc/pki/tls/certs/lesstif.com.crt  -extfile host_openssl.conf

이제 이렇게 생성된 키를 아파치에 적용하면 된다

아파치는 설치 됫다고 가정하고
yum install mod_ssl -y
로 mod_ssl 설치 한다

그리고 httpd.conf 파일에

Listen 80
아래에
Listen 443 추가하고

추가 설정 파일에

vi /etc/httpd/conf.d/ssl.conf

NameVirtualHost *:443 
<VirtualHost *:443>
  ServerName [서버명] ex)아래와 동일하게 줫음
  ServerAlias [서버명]
  SSLEngine on
  SSLProtocol all -SSLv2
  SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
  ## 위에서 생성한 SSL 인증서와 개인키
  SSLCertificateFile /etc/pki/tls/certs/lesstif.com.crt
  SSLCertificateKeyFile /etc/pki/tls/private/lesstif.com.key
  SSLCACertificateFile /etc/pki/tls/certs/lesstif-rootca.crt
  ## 
  <Files ~ "\.(cgi|shtml|phtml|php3?)$">
            SSLOptions +StdEnvVars
        </Files>
        <Directory "/var/www/cgi-bin">
            SSLOptions +StdEnvVars
        </Directory>
  SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
  ErrorLog logs/example.com-ssl_error_log
  TransferLog logs/example.com-ssl_access_log
  LogLevel warn
  CustomLog logs/example.com-ssl_request_log \
   "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>

이렇게 하고
아파치 재기동 하면 된다..

아 selinux는 끄고 했다 혹시 켜저 있으면 안될수 있다고 한다

그리고 서버에 있는 /etc/pki/tls/certs/ 디렉토리에 rootCA 인증서와 호스트용 인증서

crt 파일을 pc 인증서에 rootCA 파일은 신뢰할수 있는 인증서에 그리고 호스트는 등록할때 자동분류로 하면 알아서 등록되고

브라우저에서 https 로 접근하면 바로 접근 된다.

pc 인증서는 크롬에서 설정 들어간뒤에 상단 검색에 인증서 라고 검색하면 보안 부분나오고 젤 하단에 보면 인증서 관리 있다

728x90