OpenSSL로 개인 인증 기관 구축(루트 CA, 중간 CA)

소개



이 항목은 OpenSSL을 사용하여 PKI를 구축하는 절차를 설명합니다.
PKI 자체나 기술 배경 등의 기재는 없습니다.

개요



다음과 같이 루트 CA와 중간 CA를 만듭니다.
업데이트 내역 2020.1.28 그림의 추가와 인수를 일부 변경(example.net으로 하거나 등)      와, 덤의, 일발 구축 코피페 텍스트도 수정했습니다. 대상 장비 및 환경 CentOS7(7.6.1810) 이 항목을 읽으면 할 수 있는 일 Linux의 OpenSSL을 이용하여 루트 CA와 중간 CA를 만들고 증명서 발행할 수 있는 환경을 준비할 수 있다 해야. 사전 준비 디렉토리 배치 mkdir -p /opt/pki mkdir /opt/pki/configs mkdir /opt/pki/crl mkdir /opt/pki/RootCA mkdir /opt/pki/InterCA mkdir /opt/pki/Server mkdir /opt/pki/Client openssl 용 구성 파일 작성 서명용 /opt/pki/configs/openssl_sign.cnf [ ca ] default_ca=CA_default [CA_default] dir = ./ certs = $dir/certs crl_dir = $dir/crl database = $dir/index.txt new_certs_dir = $dir/newcerts serial = $dir/serial crlnumber = $dir/crlnumber crl = $dir/crl.pem RANDFILE = $dir/.rand name_opt=ca_default cert_opt=ca_default default_days = 365 default_crl_days=30 default_bits = 2048 default_md = sha256 preserve=no policy = policy_match [ policy_match ] countryName=match stateOrProvinceName=match organizationName=match organizationalUnitName = optional commonName = supplied emailAddress = optional [v3_ca] subjectKeyIdentifier=hash authorityKeyIdentifier=keyid:always,issuer basicConstraints=CA:true keyUsage = cRLSign,keyCertSign [v3_server] subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = serverAuth crlDistributionPoints = URI:http://192.168.0.254/crl/example.net.crl [ v3_client ] subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = clientAuth crlDistributionPoints = URI:http://192.168.0.254/crl/example.net.crl 인증국 구축 RootCA(루트 인증 기관) 다음 순서로 생성합니다. 1. 비밀 키 생성 (= 단지 비밀 키) 2. 비공개 키로부터 증명서 서명 요구를 생성 3. 비밀키로 증명서 서명 요구에 서명 ) 즉,이 절차는 "자기 서명 된 CA 기능이있는 인증서"를 생성하는 것입니다. 올레올레한 세계에서, 「이것이 루트 CA다!」라고 인식하면, 이것이 루트 CA 증명서가 된다. 환경 초기화 cd /opt/pki/RootCA mkdir newcerts echo "01" > serial echo "00" > crlnumber touch index.txt RootCA의 개인 키 만들기 RootCA의 개인 키 암호화 암호는 -passout으로 제공됩니다. 암호는 rootcaprivkeypass입니다. openssl genrsa \ -out RootCA_key.pem\ -aes256\ -passout pass:rootcaprivkeypass \ 2048 RootCA의 개인 키로 RootCA의 인증서 서명 요청 작성 RootCA의 비밀열쇠를 이용하기 때문에 -passin 로 패스워드를 주고 있습니다. openssl req -new\ -subj "/C=JP/ST=Tokyo/O=EXAMPLE/CN=EXAMPLE Root CA" \ -out RootCA_csr.pem\ -key RootCA_key.pem\ -passin pass:rootcaprivkeypass RootCA의 개인 키로 RootCA의 인증서 서명 요청에 서명 RootCA의 비밀열쇠를 이용하기 때문에 -passin 로 패스워드를 주고 있습니다. openssl ca -config ../configs/openssl_sign.cnf -batch -extensions v3_ca\ -out RootCA_crt.pem\ -in RootCA_csr.pem\ -selfsign\ -keyfile RootCA_key.pem\ -passin pass:rootcaprivkeypass 마지막으로 여분의 문자열을 제거하기 위해 openssl x509 -in 인증서 -out 인증서를 사용합니다. 이것이 RootCA의 인증서입니다. openssl x509 -in RootCA_crt.pem -out RootCA_crt.pem InterCA(중간 인증 기관) 다음 순서로 생성합니다. 1. 비밀 키 생성 (= 단지 비밀 키) 2. 비공개 키로부터 증명서 서명 요구를 생성 3. 비밀열쇠로 증명서 서명 요구에 서명 즉,이 절차는 "루트 CA (로 인식되는 인증서)에서 발급 한 CA의 기능을 가진 인증서"를 생성하는 것입니다.

환경 초기화

cd /opt/pki/InterCA
mkdir newcerts
echo "01" > serial
echo "00" > crlnumber
touch index.txt

InterCA의 개인 키 만들기

InterCAの秘密鍵の暗号化パスワードは -passout で与えています。
パスワードは intercaprivkeypass としています。

openssl genrsa \
 -out InterCA_key.pem \
 -aes256 \
 -passout pass:intercaprivkeypass \
 2048

InterCA 개인 키로 InterCA 인증서 서명 요청 만들기

InterCAの秘密鍵を利用するので -passin でパスワードを与えてます。

openssl req -new \
 -subj "/C=JP/ST=Tokyo/O=EXAMPLE/CN=EXAMPLE Intermediate CA" \
 -out InterCA_csr.pem \
 -key InterCA_key.pem \
 -passin pass:intercaprivkeypass 

RootCA의 개인 키로 InterCA의 인증서 서명 요청에 서명합니다.

RootCAの秘密鍵を利用するので -passin でパスワードを与えてます。

cd /opt/pki/RootCA
openssl ca -config ../configs/openssl_sign.cnf  -batch -extensions v3_ca \
 -out ../InterCA/InterCA_crt.pem \
 -in  ../InterCA/InterCA_csr.pem \
 -cert RootCA_crt.pem \
 -keyfile RootCA_key.pem \
 -passin pass:rootcaprivkeypass

最後に余計な文字列を取り除くため、 openssl x509 -in 証明書 -out 証明書 しています。
これがInterCAの証明書となります。

cd /opt/pki/InterCA
openssl x509 -in InterCA_crt.pem -out InterCA_crt.pem

사이고에게

今後、このPKIを利用したEAP-TLS認証のやり方も整理したいです。

一連の作成は以下のコマンドをべろべろー、とコピペすると /opt/pki 配下に環境がつくれます。
コンフィグファイルもヒアドキュメントにしているので、まるまるコピペでOKです。

既存で同ディレクトリが存在している場合には、テキストを修正して別名で作成してください。

もしくは /opt/pkiのデータを別のところに退避してから!
rm /opt/pki -rf で既存をすべて削除してもつくれます。

mkdir -p /opt/pki
mkdir /opt/pki/configs
mkdir /opt/pki/crl
mkdir /opt/pki/RootCA
mkdir /opt/pki/InterCA
mkdir /opt/pki/Server
mkdir /opt/pki/Client

cat <<'EOF' > /opt/pki/configs/openssl_sign.cnf
[ ca ]
default_ca      = CA_default

[ CA_default ]
dir             = ./
certs           = $dir/certs
crl_dir         = $dir/crl
database        = $dir/index.txt
new_certs_dir   = $dir/newcerts
serial          = $dir/serial
crlnumber       = $dir/crlnumber
crl             = $dir/crl.pem
RANDFILE        = $dir/.rand

name_opt        = ca_default
cert_opt        = ca_default

default_days    = 365
default_crl_days= 30
default_bits    = 2048
default_md      = sha256
preserve        = no
policy          = policy_match

[ policy_match ]
countryName             = match
stateOrProvinceName     = match
organizationName        = match
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = optional

[ v3_ca ]
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer
basicConstraints=CA:true
keyUsage = cRLSign,keyCertSign

[ v3_server ]
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
crlDistributionPoints = URI:http://192.168.0.254/crl/example.net.crl

[ v3_client ]
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = clientAuth
crlDistributionPoints = URI:http://192.168.0.254/crl/example.net.crl
EOF

cd /opt/pki/RootCA
mkdir newcerts
echo "01" > serial
echo "00" > crlnumber
touch index.txt

openssl genrsa -out RootCA_key.pem -aes256 -passout pass:rootcaprivkeypass 2048
openssl req  -new -out RootCA_csr.pem -key RootCA_key.pem -passin pass:rootcaprivkeypass -subj "/C=JP/ST=Tokyo/O=EXAMPLE/CN=EXAMPLE Root CA"
openssl ca -config ../configs/openssl_sign.cnf -out RootCA_crt.pem -in RootCA_csr.pem -selfsign -keyfile RootCA_key.pem -passin pass:rootcaprivkeypass -batch -extensions v3_ca
openssl x509 -in RootCA_crt.pem -out RootCA_crt.pem


cd /opt/pki/InterCA
mkdir newcerts
echo "01" > serial
echo "00" > crlnumber
touch index.txt

openssl genrsa -out InterCA_key.pem -aes256 -passout pass:intercaprivkeypass 2048
openssl req  -new -out InterCA_csr.pem -key InterCA_key.pem -passin pass:intercaprivkeypass -subj "/C=JP/ST=Tokyo/O=EXAMPLE/CN=EXAMPLE Intermediate CA"
cd /opt/pki/RootCA
openssl ca -config ../configs/openssl_sign.cnf -out ../InterCA/InterCA_crt.pem -in ../InterCA/InterCA_csr.pem -cert RootCA_crt.pem -keyfile RootCA_key.pem -passin pass:rootcaprivkeypass -batch -extensions v3_ca
cd /opt/pki/InterCA
openssl x509 -in InterCA_crt.pem -out InterCA_crt.pem

좋은 웹페이지 즐겨찾기