# 用 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
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up