SSL自己署名証明書作成(webサーバ:nginx)

More than 1 year has passed since last update.

Manual

SSL鍵配置ディレクトリを作成

## root user

cd /etc/nginx
pwd
mkdir -p ssl/{work,key,cert}
chmod 700 ssl/key

DOMAIN_NAME='example.com'
echo $DOMAIN_NAME

乱数生成

## 
## 鍵を作成するための乱数を生成する
## 

cd /etc/nginx/ssl
dd if=/dev/urandom of=work/${DOMAIN_NAME}.rand count=1024 bs=1024
chmod 700 work/${DOMAIN_NAME}.rand

秘密鍵生成

## 
## openssl genrsaコマンドでRSA形式の秘密鍵を生成
## 擬似乱数を渡して、2048bitで暗号化している
## 
cd /etc/nginx/ssl
openssl genrsa -rand work/${DOMAIN_NAME}.rand -des3 2048 > key/${DOMAIN_NAME}.key
  # 秘密鍵のパスフレーズを入力

ls -l key/${DOMAIN_NAME}.key
chmod 700 key/${DOMAIN_NAME}.key

CSR生成

##
## CSRとは、サーバ証明書への署名を認証局へ要求するための申請書のようなもの
## Certificate Signing Request
## CSR作成時に、コモンネーム(https通信したいドメイン名)や運営者情報などの入力を促される
## (各認証局に署名を依頼する場合、email, passwordなどの入力はemptyのままにしておくよう注意書きしている認証局が多い)
## CSRはここで入力した情報に加えて、さっき作った秘密鍵と対になる公開鍵情報も含まれている
## 
cd /etc/nginx/ssl
openssl req -new -key key/${DOMAIN_NAME}.key -out work/${DOMAIN_NAME}.csr
  # pass phraseは、先ほど設定した秘密鍵のパスを入力する
  # 秘密鍵から公開鍵を算出するため、秘密鍵を指定する必要がある
  # (秘密=>公開の特定は簡単、公開=>秘密の特定はほぼ不可能という暗号アルゴリズムの特性)
chmod 700 work/${DOMAIN_NAME}.csr

自己署名

cd /etc/nginx/ssl
openssl req -x509 -in work/${DOMAIN_NAME}.csr -key key/${DOMAIN_NAME}.key -out cert/${DOMAIN_NAME}.self.crt -days 3650
  # 10年間有効な自己署名のサーバ証明書を作成
chmod 700 cert/${DOMAIN_NAME}.self.crt

パスフレーズ解除版の証明書作成する

cd /etc/nginx/ssl
openssl rsa -in key/${DOMAIN_NAME}.key -out key/${DOMAIN_NAME}.nopass.key
  # 秘密鍵作成時に指定したパスフレーズを入力
chmod 700 key/${DOMAIN_NAME}.nopass.key

conf

server{}ディレクティブ内に以下を記述して再起動.

ssl on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_certificate /etc/nginx/ssl/cert/${DOMAIN_NAME}.self.crt;
ssl_certificate_key /etc/nginx/ssl/key/${DOMAIN_NAME}.nopass.key;

Environment

$yum list nginx
インストール済みパッケージ
nginx.x86_64         1:1.6.2-1.22.amzn1         @amzn-updates