名詞解釋:
- CA(Certificate Authority):證書頒發機構
- SSL(Secure Sockets Layer): 安全套接字協議
- HTTPS(Hypertext Transfer Protocol Secure):安全超文本傳輸協議,應用了SSL。
- key:私鑰
- openssl:SSL工具
- RSA:一種加密算法
- x509:證書格式標准,這種證書只有公鑰,不包含私鑰。
編碼方式:
- pem:后綴的證書都是base64編碼
- der:后綴的證書都是二進制格式
證書:
- csr:證書簽名請求,后綴的文件是用於向ca申請簽名的請求文件。
- crt和cer:后綴的文件都是證書文件(編碼方式不一定,有可能是.pem,也有可能是.der)
一、編譯安裝openssl
參考:Windows編譯安裝openssl - 奧巴榮 - 博客園
https://www.cnblogs.com/obarong/p/13260321.html
二、創建根CA(完成一次)
創建根密鑰
注意: 這是用於簽署證書請求的密鑰,持有此證書的任何人都可以代表您簽署證書。因此,請將其保存在安全的地方!
openssl genrsa -des3 -out rootCA.key 4096
如果您想要一個非密碼保護的密鑰,只需刪除-des3
選項
創建並自簽名根證書
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.crt
在這里,我們使用根密鑰創建了根證書,該根證書需要在所有必須信任我們的計算機中分發。
三、創建一個證書(為每個服務器完成)
對於需要來自我們CA的受信任證書的每個服務器/設備,都需要遵循此過程。
創建證書密鑰
openssl genrsa -out mydomain.com.key 2048
創建簽名(csr)
在證書簽名請求中,您可以指定要生成的證書的詳細信息。
根密鑰的所有者(在本例中是您之前創建的)將處理該請求以生成證書。
重要提示: 請注意,在創建簽名請求時,務必要指定提供服務IP地址或域名的Common Name
,否則將無法驗證證書。
我將在這里描述兩種生成方式
方法A(交互式)
如果以這種方式生成csr,openssl將詢問您有關生成證書的問題,例如組織詳細信息和Common Name
(CN),即創建證書的網址,例如mydomain.com
。
openssl req -new -key mydomain.com.key -out mydomain.com.csr
方法B(一行代碼)
此方法產生的輸出與方法A相同,但適用於自動化:)。
openssl req -new -sha256 -key mydomain.com.key -subj "/C=US/ST=CA/O=MyOrg, Inc./CN=mydomain.com" -out mydomain.com.csr
如果您需要通過其他配置,則可以使用-config
參數,例如,在這里我想為證書添加替代名稱。
openssl req -new -sha256 \
-key mydomain.com.key \
-subj "/C=US/ST=CA/O=MyOrg, Inc./CN=mydomain.com" \
-reqexts SAN \
-config <(cat /etc/ssl/openssl.cnf \
<(printf "\n[SAN]\nsubjectAltName=DNS:mydomain.com,DNS:www.mydomain.com")) \
-out mydomain.com.csr
驗證csr的內容(可選)
openssl req -in mydomain.com.csr -noout -text
使用mydomain
csr和密鑰以及CA Root密鑰生成證書
openssl x509 -req -in mydomain.com.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out mydomain.com.crt -days 500 -sha256
驗證證書的內容(可選)
openssl x509 -in mydomain.com.crt -text -noout
參考
Self Signed Certificate with Custom Root CA · GitHub
https://gist.github.com/fntlnz/cf14feb5a46b2eda428e000157447309
[轉]如何創建一個自簽名的SSL證書(X509) - lihuang - 博客園
https://www.cnblogs.com/lihuang/articles/4205540.html
證書,私鑰,公鑰,pfx,keystore,pem,der 都是什么?_雲守護的專欄-CSDN博客_pem證書是什么
https://blog.csdn.net/earbao/article/details/82958518
ssl_百度百科
https://baike.baidu.com/item/SSL
問題
- Mac添加rootCA.crt到鑰匙串-登錄-證書。訪問報錯
此服務器無法證實它就是 192.168.3.3 - 它的安全證書沒有指定主題備用名稱。這可能是因為某項配置有誤或某個攻擊者攔截了您的連接。
但是可以繼續前往。
解:
創建文件192.168.3.3-2.ext,添加內容
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth
subjectAltName=@SubjectAlternativeName
[ SubjectAlternativeName ]
IP.1=192.168.3.1
IP.2=192.168.3.3
生成crt
openssl x509 -req -in 192.168.3.3.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out 192.168.3.3-2.crt -days 500 -sha256 -extfile 192.168.3.3-2.ext
參考 OpenSSL自簽發自建CA簽發SSL證書 - justdoit - 博客園
https://www.cnblogs.com/will-space/p/11913744.html
- crt轉pem
解:
openssl x509 -in 192.168.3.3-2.crt -out 192.168.3.3-2.pem
- 提示證書時間過長
解:有效時間要小於39個月
openssl x509 -req -in 192.168.3.3.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out 192.168.3.3-2.crt -days 500 -sha256 -extfile 192.168.3.3-2.ext
參考 Mac版Chrome 錯誤提示NET::ERR_CERT_VALIDITY_TOO_LONG怎么解決? - 知乎
https://www.zhihu.com/question/403851332