2020年5月11日月曜日

自己証明書と nip.io を使って Eclipse Che を HTTPS 化する

ワンショットのデモをやることになったので、環境構築手順をメモ。

各種資材は 2019 年 10 月ごろのものなので最新化しなきゃ…

前提

Azure へログイン

PowerShell で mikoto2000/aks-tools イメージを起動。

mikoto2000/aks-tools コンテナ内でで Azure へログインする。

URL と code が表示される。Web ブラウザで表示された URL にアクセスし、 表示されたページのコード入力欄に code を入力。

Kubernetes クラスタ作成

mikoto2000/aks-tools コンテナ内ででクラスタを作成する。

Ingress デプロイ

ingress-nginx の LoadBalancer に EXTERNAL-IP が割り当てられるまで待つ。

Ingress の公開 IP アドレスをメモ。

証明書作成

下準備

mikoto2000/openssl を使用して証明書を作成。

コンテナ内で証明書作成

# 必要な情報整理

## ドメイン定義
DOMAIN_IP="20.37.126.225"
DOMAIN="$(echo ${DOMAIN_IP} | sed -e "s/\./-/g").nip.io"

## SAN 設定作成
echo "subjectAltName = @alt_names" >> ./usr_lib_ssl/v3.txt
echo "" >> ./usr_lib_ssl/v3.txt
echo "[ alt_names ]" >> ./usr_lib_ssl/v3.txt
echo "DNS.1 = "'*'".${DOMAIN}" >> ./usr_lib_ssl/v3.txt

## 各種生成物定義
CA_KEY_FILE="/ca/private/cakey.pem"
CA_CSR_FILE="/ca/ca.csr"
CA_CRT_FILE="/ca/cacert.pem"

CA_COUNTRY="JP"
CA_STATE="KEN"
CA_LOCALITY="KU"
CA_ORGANIZATION="KOJIN"
CA_ORGANIZATION_UNIT="NONE"
CA_COMMON="${DOMAIN}"
CA_EMAIL="mikoto2000@gmail.com"


# CA 初期化
cd /ca

## 各種ディレクトリ作成
mkdir cert private crl newcerts
chmod 700 private

## シリアル初期化
echo "01" | tee -a serial

## crlnumber 初期化
echo "01" | tee -a crlnumber

## インデックス初期化
touch index.txt
echo "unique_subjec = yes" > index.txt.attr


# CA 鍵と CA 証明書作成

## CA 用秘密鍵作成
openssl genrsa -out ${CA_KEY_FILE} 2048

## CA 証明書要求作成
CA_SUBJECT="/C=${CA_COUNTRY}/ST=${CA_STATE}/L=${CA_LOCALITY}/O=${CA_ORGANIZATION}/OU=${CA_ORGANIZATION_UNIT}/CN=${CA_COMMON}"
openssl req -new -key ${CA_KEY_FILE} -out ${CA_CSR_FILE} -subj "${CA_SUBJECT}"

## CA 証明書要求確認
openssl req -noout -text -in ${CA_CSR_FILE}

## CA 証明書作成
openssl x509 -req -in ${CA_CSR_FILE} -signkey ${CA_KEY_FILE} -out ${CA_CRT_FILE} -extfile /usr/lib/ssl/v3_ca.txt

## CA 証明書確認
openssl x509 -text -noout -in ${CA_CRT_FILE}

## CA 証明書を out ディレクトリへコピー
cp ${CA_CRT_FILE} /client/ca.crt


# サーバー証明書発行
SERVER_COMMON="${DOMAIN}"
SERVER_KEY_FILE="/client/${SERVER_COMMON}.key"
SERVER_CSR_FILE="/client/${SERVER_COMMON}.csr"
SERVER_CRT_FILE="/client/${SERVER_COMMON}.crt"

SERVER_COUNTRY="JP"
SERVER_STATE="KEN"
SERVER_LOCALITY="KU"
SERVER_ORGANIZATION="KOJIN"
SERVER_ORGANIZATION_UNIT="NONE"
SERVER_COMMON="${DOMAIN}"
SERVER_EMAIL="mikoto2000@gmail.com"

## サーバー秘密鍵作成
openssl genrsa -out ${SERVER_KEY_FILE} 2048

## サーバー証明書要求作成
SERVER_SUBJECT="/C=${SERVER_COUNTRY}/ST=${SERVER_STATE}/L=${SERVER_LOCALITY}/O=${SERVER_ORGANIZATION}/OU=${SERVER_ORGANIZATION_UNIT}/CN=${SERVER_COMMON}"
openssl req -new -key ${SERVER_KEY_FILE} -out ${SERVER_CSR_FILE} -subj "${SERVER_SUBJECT}"

## クライアント証明書要求確認
openssl req -noout -text -in ${SERVER_CSR_FILE}


# サーバー証明書作成
cd /client
yes | openssl ca -out ${SERVER_CRT_FILE} -extfile /usr/lib/ssl/v3.txt -infiles ${SERVER_CSR_FILE}

DOMAIN_IP: mikoto2000/aks-tools でメモした EXTERNAL-IP

Kubernetes に証明書を設定

mikoto2000/aks-tools コンテナ内での作業。

デプロイ

ソースコード取得

tiller のインストール

che デプロイ

devfile-registry の修正

quay.io/eclipse/che-devfile-registry:nightly -> mikoto2000/che-devfile-registry:ET2019.

plugin-registry の修正

quay.io/eclipse/che-plugin-registry:nightly -> mikoto2000/che-plugin-registry:ET2019.

デプロイ

che-plugin-registryche-devfile-registry7.4.0 向けなので che-server もそれに合わせる。

動作確認

  1. 作成した ca.crt をブラウザにインポート
  2. https://che-keycloak.$DOMAIN へ接続して管理者設定・ユーザー追加
  3. https://che-che.$DOMAIN へ接続してログイン

余裕があったら別記事で手順を書く。

後片付け

mikoto2000/aks-tools で以下コマンドを実行。

以上。

0 件のコメント:

コメントを投稿