UPKIとApache2とNginx(新規作成)

Linux

はじめに

UPKIクライアント証明書を申請、設定します。
証明書を使用するパソコンで作業します。

環境

- Debian bookworm

手順

該当パソコンにログインします。

mkdir -m 700 ~/upki
cd ~/upki

証明書を更新する場合は、前回に作成したファイル名を移動します。

mkdir ~/upki/2024
mv rand.dat ~/upki/2024
mv XXXXX.key ~/upki/2024
mv XXXXX.csr ~/upki/2024

ランダムファイルを生成します。

cd ~/upki
head -c 1m /dev/urandom > rand.dat

秘密鍵を作成します。
パスフレーズを付加して作成するには「-des3」、または「-aes256」を付加しますが、今回は指定しません。

/usr/bin/openssl genrsa -rand rand.dat 2048 > XXXXX.key

CSR(証明書発行要求書)を作成します。

/usr/bin/openssl req -new -key XXXXX.key -sha256 -out XXXXX.csr

opensslのバージョンによって若干メッセージが異なります。
サーバ名は「XXXXX.com」としています。
最後の方に入力する
 ・Organizational Unit Name
 ・Email Address
 ・A challenge password
 ・An optional company name
には半角ドット「.」を入力します。

Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Okinawa
Locality Name (eg, city) [Default City]:Nago
Organization Name (eg, company) [Default Company Ltd]:CompanyName
Organizational Unit Name (eg, section) []:.
Common Name (eg, your name or your server's hostname) []:XXXXX.com
Email Address []:.

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:.
An optional company name []:.

生成したファイルの内容を確認します。

/usr/bin/openssl req -noout -text -in XXXXX.csr

下記URLにアクセスしてTSVファイルを作成します。

TSVツール: トップメニュー

「TSVを作成する/既存のTSVを編集する」の「作成開始」をクリックします。
以下の内容を入力して「この内容で作成を開始」をクリックします。

・TSVファイル種別は「新規発行申請用TSV」。
・証明書種別は「サーバ証明書」。
・証明書プロファイルは「サーバ証明書(sha256WithRSAEncryption)」。
・発行方法は空欄。

「作成済みTSVファイル」は、空欄で良いです。
「CSRファイル読込」項目の「ファイル選択」をクリックして、作成したCSRファイルを選択、「読込」をクリックします。

以下の内容を入力して「完了」をクリックします。
「利用管理者氏名」、「利用管理者所属」はローマ字で記述します。
「Webサーバソフトウェア名等:」は使っているWebサーバ(Apache2、Nginxなど)を入力します。

・利用管理者E-mail
・利用管理者氏名
・利用管理者所属
・Webサーバソフトウェア名等

「ダウンロード」をクリックしてTSVファイルをダウンロードします。

該当施設の管理者にメールなどでTSVファイルを送って、手続きを依頼します。
UPKI事務局から「サーバ証明書発行受付通知」のSubjectでメールが届くので、証明書をダウンロードして、サーバに配置します。

証明書の配置

NginxとApache2.4.8以降の場合、SSLCertificateFileは、SSL証明書(csrファイル)と中間証明書(cerファイル)の順に記述したファイル(crtファイル)を作成して指定します。
新規に作成したcer、csr、keyファイルをコピーします。

sudo mkdir /etc/ssl/upki
cd /etc/ssl/upki

sudo cp ~/upki/XXXXX.cer .
sudo cp ~/upki/XXXXX.key .
sudo cp ~/upki/XXXXX.csr .

su
cat XXXXX.csr XXXXX.cer > XXXXX.crt
exit

sudo chmod 600 XXXXX.*

Apache2の設定

設定ファイルをssl.confとします。

cd /etc/apache2/sites-available

sudo a2enmod rewrite
sudo a2enmod ssl

sudo cp default-ssl.conf ssl.conf
sudo vi ssl.conf

ssl.confの修正箇所です。
以下の変数なども適切に設定します。
・ServerAdmin
・DocumentRoot

SSLCertificateFile     /etc/ssl/upki/XXXXX.crt
SSLCertificateKeyFile  /etc/ssl/upki/XXXXX.key

非SSLのサイトをSSLサイトにリダイレクトするようにVirtualHostディレクティブの最後に記述します。

sudo vi normal.conf

下記を追加します。

<VirtualHost *:80>
   ServerAdmin webmaster@localhost
   ServerName XXXXX.com
   DocumentRoot /home/www/html

   省略

   RewriteEngine On
   RewriteCond %{HTTPS} off
   RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>

Apache2を再起動します。

sudo systemctl restart apache2

Nginxの設定

設定ファイルをexpとします。

cd /etc/nginx/sites-available
sudo vi exp

ファイルの内容です。
非SSLのサイトをSSLサイトにリダイレクトするように「return 301 https://$host$request_uri;」を記述します。

server {
    listen 80;
    server_name XXXXX.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    #listen [::]:443 ssl http2 default_server;

    ssl_certificate     /etc/ssl/upki/XXXXX.cer;
    ssl_certificate_key /etc/ssl/upki/XXXXX.key;

    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout 10m;

    charset utf-8;

    location / {
         root /home/www/html;
    }
}

Nginxを再起動します。

sudo systemctl restart nginx

確認

該当WebサイトにWebブラウザでアクセスして確認します。

Comments