만약 클러스터 내에서 보안 시스템을 꾸린다고 하자. 일반적인 SSL Certification으로는 작업을 하기 힘들 것이다. SSL Certification 자체가 특정 도메인을 가지고 있기 때문에, 이런 목적에는 맞지 않기 때문이다. (물론 강제로 한다면 할 수도 있겠다. 만약 한다고 하면 LetsEncrypt 이외의 상용 인증서를 사용하자)
아예 특정한 인증서를 발급 받을것이 아니면, Self-Sigend Certifcation이 큰 도움이 될 수 있다. 이 경우 두가지의 인증서를 만들어야 한다
Root Certification은 단순히 Certification Verify (Chaining)을 위해 존재한다. 암호화의 특성상 모든 서버에서 동일한 인증서를 사용하면 좋지 않다. 보안은 과할수록 좋기 때문이다! 그렇기 때문에, 우리가 각 웹 사이트마다 다른 인증서를 쓰듯이 각 서버(host)마다 다른 인증서를 사용함이 좋다. 특히 인증서의 "사용목적" 항목 등을 이용해서 "최종 Front-end용 인증서" 등을 표기하고 검사하게 하면 더욱 좋을 것이다. (외부에서 연결을 요구 할 수 있다. 이때 인증서의 목적에 따라 접근제어를 할 수 있다.)
각 클라이언트에는 Root Certification 으로 사이닝한 인증서를 넣어준다.
# CA용 인증서 생성.
# 이것은 망분리가 이루어진 서버에서 해야하며, 생성된 파일 또한 USB등에 따로 보관해야함
openssl req -x509 -days 365 -newkey rsa:8192 -keyout ca_private_key_8192.pem -out ca_cert_8192.pem
# 각 서버에서 사용할 개인 인증서 생성.
openssl req -new -newkey rsa:4096 -keyout my_private_key.pem -out my_cert_req.pem
# ca_cert, ca_private_cert를 이용해서 my_cert_req.pem을 사이닝 함
openssl x509 -req -in my_cert_req.pem -days 365 -CA ca_cert.pem -CAkey ca_private_key.pem -CAcreateserial -out my_signed_cert.pem
# ca_cert_8192.pem 이 사이닝 한 것이 맞는지 검증.
# ca의 퍼블릭 키는 사전에 각 서버에 배포되어 있어야 함.
# my_signed_cert.pem 은 상대측 서버에서 보내준 인증서임.
# 보안을 위해, 상호인증이 필요함. 즉, 너도 나도 CA가 인증해준 인증서를 가지고 있어야지 접속승이
# 이때 인증서의 목적이나 기타 필드로 "여기에 접속하면 안되는 놈인데?" 같은걸 판별하여 추가 보안유지
openssl verify -CAfile ca_cert_8192.pem my_signed_cert.pem
근데.. 그러면 서버 갯수만큼의 키가 만들어질 것임. key mangement 시스템도 구축 해야함. 물론.. 수동으로 하려면 할 수는 있는데, 서버가 수십대로 많아지면 감당이 불가 할 것임. OCSP 까지 준비해야 하지 않을까?