0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

プライベート認証局でCockpitにhttpsで接続する

Last updated at Posted at 2025-04-23

自室サーバはLDAP認証を入れるまではとTLS化を後回しにしてきましたが、ようやくLDAP認証にできたので今度はシステム全体をTLS化していくことにしました。

まずは入り口のCockpitのTLS化を行いますが、もうあっちこっちでやり方が書かれているので自分用の備忘録だけ。

RootCA証明書を作る

OSはFedora42でSELinuxは有効にしています。

ドメインも持っているしLet`s Encryptを使おうか、と一瞬思いましたがインターネットにつながってないと(やらかしてよくサーバ(=ルータ)が落ちる)認証が止まるので、無しの方向で……

というわけでオレオレ認証局でやることにしました。

RootCAの秘密鍵の生成

サーバ証明書等に署名するためのオレオレRootCAの秘密鍵(rootCA.key)を作ります。

4096ビット長RSA鍵にしました。

$ openssl genrsa -out rootCA.key 4096

秘密鍵なのでしっかり管理しましょう。

RootCAの自己署名証明書の作成

PCやブラウザに登録して オレオレCAだけど信頼してやんよ ってするための証明書です。

各クライアントに入れるメンドクサさはありますが、インターネット接続ができなくても使えるのが便利です。

$ openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 3650 -out rootCA.crt
...
入力していく(CommonName以外はあんまり重要じゃない)

証明書なのでコチラを各端末に配布します。

Server証明書を作る

サービスするサーバー側の証明書です。クライアントはこの証明書を見て信頼できると判断したらTLSセッションを開始します。

実際に信頼できるかどうかはRootCA証明書と付き合わせて判断します。

サーバー証明書の秘密鍵の生成

2048ビット長RSA鍵にしました。

$ openssl genrsa -out server.key 2048

こちらはサーバアプリケーションごとに置き場所が決まってたりするので、証明書を作った後で移動なりコピーなりします。これも秘密鍵なので漏らさないように工夫が必要なやつです。

証明書署名要求(CSR)の作成

RootCAに認証してもらうための情報ファイルを作ります。

SAN(SubjectAlternativeName)を使うと複数ドメイン、IP、ホストが設定できて便利よーとのことだったので、SAN形式を使います。

流石に0から作るのは面倒だったのでGeminiさんに作ってもらいました。

san.cnf
[req]
req_extensions = v3_req
prompt = no
distinguished_name = req_distinguished_name

[req_distinguished_name]
C = JP
ST = Shimane
L = Masuda
O = MyHome
CN = minipc.home

[v3_req]
basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1 = minipc.home
DNS.2 = localhost
IP.1 = fdxx:xxxx:xxxx::xxxx

先ほど作ったサーバ証明書用の秘密鍵を使ってサーバ証明書を作成します。

$ openssl req -new -key server.key -out server.csr -config san.cnf

RootCAによるサーバー証明書への署名

いくらサーバが 俺を信じろ! といったところでだれも信用してくれないので、信頼できるRootCAさんのお墨付き(署名)をもらいます。

$ openssl x509 -req -in server.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out server.crt -days 365 -sha256 -extfile san.cnf -extensions v3_req

CAcreateserialオプションはrootCA.srlというシリアル番号ファイルがあればその番号を使い署名後値を1増やします。ファイルが無ければ適当なシリアル番号が振られてファイルが作成されます。

署名のシリアル番号がかぶってはイケナイのでこのファイルもrootCA.keyと一緒に管理しろとのことです。

後のオプションはわりと見たまんまですね。

Cockpitに署名を導入

デフォルトの設定では/etc/cockpit/ws-certs.dにサーバ証明(cert,key)を置けば自動で使ってくれるらしいのでコピーするだけです。

$ cp server.crt /etc/cockpit/ws-certs.d/0-server.cert
$ cp server.key /etc/cockpit/ws-certs.d/0-server.key

オーナーがroot、パーミッションがkeyは600、certが644以下になっていることを確認しておきます。

$ ls /etc/cockpit/ws-certs.d
...
-rw-r--r--. 1 root root 1749  0-server.cert
-rw-------. 1 root root 1704  0-server.key

再起動すれば反映されます

$ systemctl restart cockpit

ブラウザの設定

ブラウザにrootCA.crtを設定してブラウザを再起動すれば鍵マークに警告がでなくなります。

image.png

image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?