
我正在嘗試建立 CA 和中間 CA,以用於 Outlook 中的 Office 365 簽名/加密目的。我已經能夠遵循大量教程並使用 OpenSSL 生成生成憑證的 CA 和中間 CA。我遇到兩個問題:
- 當我產生最終使用者 x509 最終使用者憑證時,它被標記為無效,因為中間 CA 無權頒發憑證。
- 如果我使用根 CA 產生最終使用者證書,我可以很好地對電子郵件進行簽署和加密,但一段時間後它就會停止工作。
我認為問題 2 是由於最終使用者憑證未由中間 CA 簽章引起的。在 Exchange Online 中,SMIMEExpiredCertificateThumbprint 傳回中間憑證指紋,而不是根 CA。我仍然可以將根 CA 生成的最終用戶證書發佈到 GAL 並發送幾封快速電子郵件,但是一旦 Outlook 與 GAL 同步,它就會發現該證書不是從中間證書生成的,並聲明它未經授權。
我認為解決問題1就能解決問題2,但我不知道如何設定中間CA頒發憑證的權限。有什麼幫助嗎?
以下是我目前產生根 CA 和中間 CA 的方式:
openssl genrsa -out ca.key 4096
openssl req -new -x509 -days 1826 -key ca.key -out ca.crt
openssl genrsa -out ia.key 4096
openssl req -new -key ia.key -out ia.csr
openssl x509 -req -days 730 -in ia.csr -CA ca.crt -CAkey ca.key -serial -out ia.crt
以下是客戶端的產生方式:
openssl genrsa -aes128 -out email.key 2048
openssl req -new -key email.key -out email.csr
openssl x509 -req -days 365 -in email.csr -CA ia.crt -CAkey ia.key -CAcreateserial -out email.crt
openssl pkcs12 -export -in email.crt -inkey email.key -out email.pfx
openssl x509 -in email.crt -serial -noout >> email.meta
openssl x509 -in email.crt -fingerprint -noout >> email.meta
答案1
所以基本上我不一定弄清楚如何解決 OpenSSL 的問題,但發現 GnuTLS 以一種易於使用的方式提示使用憑證。
我產生根 CA 如下:
certtool --generate-privkey --bits 4096 --outfile ca.key
certtool --generate-self-signed --load-privkey ca.key --template ca.vars --outfile ca.crt
我的 ca.vars 看起來像:
organization = [Company Name]
unit = [Org Unit]
locality = [City]
state = [State]
country = [Country Code]
challenge_password = [password]
password = [password]
expiration_days = 1825
serial = 1
ca
cert_signing_key
crl_signing_key
cn = '[Company Name] Root CA 000001'
注意:密碼列在 ca.vars 檔案中,該檔案不安全;但對於我的實現,腳本會產生 vars 文件,然後使用 srm 刪除工具將其刪除。如果您不使用腳本產生 vars 文件,只需省略密碼和challenge_password 行,系統就會提示您。
那麼中間CA如下:
certtool --generate-privkey --bits 4096 --outfile ia.key
certtool --generate-request --template ia.vars --load-privkey ia.key --outfile ia.csr
certtool --generate-certificate --template ia.vars --load-request ia.csr --load-ca-certificate ca.crt --load-ca-privkey ca.key --outfile ia.crt
ca.vars 和 ia.vars 之間的區別在於我將過期天數設為 365 並添加以下行:
path_len = 1
從那裡,我可以將上述腳本與 openssl 和 ia_[sign/encrypt] 證書頒發機構結合使用來產生 x509 證書,我可以在 Outlook 和 Office 365 中使用該證書來簽署/加密電子郵件。我再貼一下,僅供參考:
openssl genrsa -aes128 -out email.key 2048
openssl req -new -key email.key -out email.csr
openssl x509 -req -days 365 -in email.csr -CA ia.crt -CAkey ia.key -CAcreateserial -out email.crt
openssl pkcs12 -export -in email.crt -inkey email.key -out email.pfx
openssl x509 -in email.crt -serial -noout >> email.meta
openssl x509 -in email.crt -fingerprint -noout >> email.meta
希望這對我以外的人有幫助! :)