Posted at

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

More than 3 years have 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