# 用 Openssl 玩自己的 ssl 憑證 基本名詞 - **ca** (Certificate Authority) 憑證簽發者,負責「發」、「簽」及「廢止」憑證,在完整的 pki 系統中,可能有多層次 ca 如 root ca、 intermediate 及 end - **ra** (Registration Authority) 申請憑證的地方,負責驗證申請者的資料/人,並將申請資料建立為 csr 向 ca 申請 - **va** (Validation Authority) 驗證憑證者,負責驗證憑證是否為有效憑證,提供 OCSP/CRL 的服務 - **csr** (Certificate Sign Request) 使用者向 ca 請求憑證的檔案,ca 簽出來會得到 crt 及 key - **crt** (Certificate) 憑證檔 - **key** (Certificate Key) 憑證檔 private key - **pki** (Public Key Infrastructure) ## 自簽憑證 (沒有獨立 ca 的玩法) 自建 x509 格式的 key 及 crt `openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout <keyname>.key -out <certname>.crt` - `x509` 憑證格式 - `-nodes` 指 key 不要加密 (no data encryption standard) - `-newkey rsa:2048` 設定 key 長度為 rsa 2048,注意需考量 client / server side 效能及硬體支援程度 由上方指令產出的 *.key 為 plain text 檔,可直接 `cat *.key` 檢視 *.crt 則為 PEM 憑證檔,可使用 `openssl x509 -in <crtname>.crt -text` 檢視 在所使用的 web server 設定相對應的 *.crt 及 *.key 後,將此 *.crt 匯入 client 機器或 browser 即可 ## 自簽憑證 (有獨立 ca 的玩法) 需先建出 ca ,使用端建出 csr,再由 ca 簽出對應的 key 及 crt **發發憑證方建立 ca** 第一步產 ca key `openssl genrsa -out <caname>.key 2048` 產生 ca private key (這個 key 流出就出大事了) 第二步利用 key 產 ca crt `openssl req -new -x509 -days 365 -sha256 -key <keyname>.key -out <crtname>.crt` key 為第一步產出來的 key **使用方建立 csr** 第一步產使用方 private key `openssl genrsa -out <keyname>.key 2048` 第二步利用 key 產出所需的 csr `openssl req -new -key <keyname>.key -out <csrname>.csr` *或是一口氣把 key 跟 csr 都產出來 `openssl req -new -newkey rsa:2048 -nodes -out <csrname>csr -keyout <keyname>.key` 若要加 ext 則再加上 `-addext "subjectAltName=DNS:<FQDN>"` **發證方依使用方 csr 簽憑證** 這件事在 ca 的機器上才有可能做到,需用到 ca key 及 ca crt (重點是 ca key) `openssl x509 -req -CAcreateserial -days 30 -sha256 -CA <cacrtname>.crt -CAkey <cakeyname>.key -in <reqcsrname>.csr -out <crtname>.crt` 此指令使用 ca 的 key 及 crt 依照 csr 產出使用方用的 crt 依此流程,可在 client 的 ca 匯入步驟一產出的 ca,則所有使用此 ca 簽發的 crt 的 server 都可以通過驗證 一般使用者的 OS、Browser 及各個 Application 有些使用 OS 的 ca list,也可能有各自的 ca list,在匯入 ca 時需注意可能會因使用的 application 不同而需用不同的方式匯入。 ## 補充 尚未深入研究其他 crt 用途及驗證設定,結論 openssl 讚啦
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.