オレオレ証明書を作成する

2018.04.17

CAおよびサーバ証明書を作成する.

用語

  • CA: Certification Authorityの略.認証局といい,証明書の発行機関が発行した証明書.
  • サーバ証明書: サーバの証明書.CAに認証してもらわないと信用が無い.
  • CRT: ASCII形式の証明書. 拡張子は.crt, .pem
  • DER: バイナリ形式の証明書.拡張子は.der

設定

Raspbianで実行した.

ディレクトリを作成

cd /etc/ssl
sudo mkdir myca
sudo mkdir newcerts
sudo mkdir certs
sudo mkdir crl
sudo mkdir private
sudo chmod 700 private

シリアルの桁数を設定

sudo touch index.txt
echo 00 | sudo tee serial

/etc/ssl/openssl.cnf

[ CA_default ]↲
dir     = /etc/ssl/myca     # Where everything is kept
private_key▸= $dir/private/ca.key # The private key
[ usr_cert ]
subjectAltName = @alt_names
[ req ]
req_extensions = v3_req
[ v3_req ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = noyuno.space
DNS.2 = *.noyuno.space # can use asterisk, but cannot use localhost subdomains

CAの作成

作成

openssl req -new -x509 -sha256 -days 3650 -newkey rsa:4096 -out ca.crt -keyout private/ca.key

パスフレーズ解除

openssl rsa -in private/ca.key -out private/ca.key

サーバ証明書の作成

要求

openssl req -new -sha256 -days 3650 -newkey rsa:4096 -out server.csr -keyout private/server.key

パスフレーズ解除

openssl rsa -in private/server.key -out private/server.key

認証

openssl ca -days 3650 -keyfile private/ca.key -cert ca.crt -in server.csr -out server.crt -config /etc/ssl/openssl.cnf

DER

sudo openssl x509 -inform pem -in server.crt -outform der -out server.der

Nginxの設定

HTTPとHTTPSを両方使用するとき(抜粋)

server {
    listen 443 ssl;
    server_name noyuno.space localhost;
    ssl on;
    ssl_certificate /etc/ssl/myca/server.crt;
    ssl_certificate_key /etc/ssl/myca/private/server.key;
    location / {
        proxy_pass http://localhost:80/;
        proxy_redirect default;
    }
}

HTTPでアクセスしてきたものに対してHTTPSを強制するとき

server {
    listen 80;
    server_name git.noyuno.space;
    return 301 https://$host$request_uri;
}