2023年5月13日土曜日

Linuxで信頼されるルート証明書として自己署名証明書を登録する

Windowsでは、自己署名証明書を「信頼されたルート証明機関」の証明書として登録することで、ブラウザでローカルのシステムにアクセスした際の証明書エラーを出さないようにできる。

以下、参考URLとなる。

Linuxでも同様に、自己署名証明書を「信頼されたルート証明機関」の証明書として登録することで証明書エラーを発生させなくすることが可能となる。

本記事では、Linuxで信頼されるルート証明書として自己署名証明書を登録し、コマンドやブラウザで証明書エラーを表示させないようにする手順を記載する。

環境

本手順の確認環境は以下となる。Red Hat系のOSであれば、同様の手順で対応できるはずだ。

  • OS : AlmaLinux release 8.6

登録する証明書情報は以下のとなる。

  • CN = My Private CA
  • O = Default Company Ltd
  • S = Tokyo
  • C = JP

自己署名証明書を「信頼されたルート証明機関」の証明書として登録する手順

1. 証明書を配置

証明書を配置する前に、「信頼されたルート証明機関」の証明書リストを以下コマンドで出力してみよう。当然だが登録前なので、ここには自己署名証明書の情報は出力されない。

# trust list
pkcs11:id=%D2%87%B4%E3%DF%37%27%93%55%F6%56%EA%81%E5%36%CC%8C%1E%3F%BD;type=cert
    type: certificate
    label: ACCVRAIZ1
    trust: anchor
    category: authority

~(以下略)~

今回の自己署名証明書はcacert.pemで事前に作成している。これを/etc/pki/ca-trust/source/anchors/のディレクトリにコピーする。

# cp cacert.pem /etc/pki/ca-trust/source/anchors/

2. 証明書反映コマンド実行

証明書配置後、以下コマンドで反映する。これだけで作業は完了となる。

# update-ca-trust

最後に、証明書の登録状況を確認しておこう。追加された証明書が一番上に表示されるはずだ。

# trust list | head -6
pkcs11:id=%28%C6%94%08%49%18%A4%19%B3%94%A9%0D%F1%54%95%00%AA%98%87%F9;type=cert
    type: certificate
    label: My Private CA
    trust: anchor
    category: authority

CA証明書登録後の接続確認

1. curlによる確認

まず、CA証明書登録前の情報を確認してみると、以下の通り、SSL certificate problem: unable to get local issuer certificate(ローカルで発行された証明書が取得できない)のエラーで接続に失敗していることがわかる。
※ちなみに、本エラーを無視して強制的に接続する場合は、-kオプションを付与すればよい。

# curl -v https://192.168.11.50
* Rebuilt URL to: https://192.168.11.50/
*   Trying 192.168.11.50...
* TCP_NODELAY set
* Connected to 192.168.11.50 (192.168.11.50) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (OUT), TLS alert, unknown CA (560):
* SSL certificate problem: unable to get local issuer certificate
* Closing connection 0
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https://curl.haxx.se/docs/sslcerts.html

curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.

CA証明書を登録後、再度同一コマンドで接続すると、今度はSSL certificate verify ok.のメッセージが出力されており、接続に成功していることがわかる。

# curl -v https://192.168.11.50
* Rebuilt URL to: https://192.168.11.50/
*   Trying 192.168.11.50...
* TCP_NODELAY set
* Connected to 192.168.11.50 (192.168.11.50) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server accepted to use http/1.1
* Server certificate:
*  subject: C=JP; ST=Tokyo; L=Default City; O=Default Company Ltd; CN=t1050harb
*  start date: Apr 29 04:08:32 2023 GMT
*  expire date: Apr 26 04:08:32 2033 GMT
*  subjectAltName: host "192.168.11.50" matched cert's IP address!
*  issuer: C=JP; ST=Tokyo; O=Default Company Ltd; CN=My Private CA
*  SSL certificate verify ok.
> GET / HTTP/1.1
> Host: 192.168.11.50
> User-Agent: curl/7.61.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Server: nginx

~(以下略)~

2. ブラウザによる確認

ブラウザはFirefoxにて確認する。ブラウザによる接続も、まずはCA証明書登録前の状態を確認すると、「潜在的なセキュリティリスクあり」の警告でエラーになる。

CA証明書を登録後は、特に警告表示なく接続先の画面が表示される。アドレスバーからも、「このサイトとの接続は安全です。」と表示されていることがわかる。

以上で、Linuxで信頼されるルート証明書として自己署名証明書を登録し、コマンドやブラウザで証明書エラーを表示させないようにする手順は完了となる。

0 件のコメント:

コメントを投稿

人気の投稿