今天嘗試在mac機上搭建docker registry私有倉庫時,杯具的發現最新的registry出於安全考慮,強制使用ssl認證,因而又詳細瞭解linux/mac上openssl的使用方法,接觸了一堆新英文縮寫,整理於下:linux
TLS:傳輸層安全協議 Transport Layer Security的縮寫docker
SSL:安全套接字層 Secure Socket Layer的縮寫瀏覽器
TLS與SSL對於不是專業搞安全的開發人員來說,能夠認爲是差很少的,這兩者是並列關係,詳細差別見 http://kb.cnblogs.com/page/197396/安全
KEY 一般指私鑰。bash
CSR 是Certificate Signing Request的縮寫,即證書籤名請求,這不是證書,能夠簡單理解成公鑰,生成證書時要把這個提交給權威的證書頒發機構。服務器
CRT 即 certificate的縮寫,即證書。ui
X.509 是一種證書格式.對X.509證書來講,認證者老是CA或由CA指定的人,一份X.509證書是一些標準字段的集合,這些字段包含有關用戶或設備及其相應公鑰的信息。google
X.509的證書文件,通常以.crt結尾,根據該文件的內容編碼格式,能夠分爲如下二種格式:編碼
PEM - Privacy Enhanced Mail,打開看文本格式,以"-----BEGIN..."開頭, "-----END..."結尾,內容是BASE64編碼.
Apache和*NIX服務器偏向於使用這種編碼格式.spa
DER - Distinguished Encoding Rules,打開看是二進制格式,不可讀.
Java和Windows服務器偏向於使用這種編碼格式
OpenSSL 至關於SSL的一個實現,若是把SSL規範當作OO中的接口,那麼OpenSSL則認爲是接口的實現。接口規範自己是安全沒問題的,可是具體實現可能會有不完善的地方,好比以前的"心臟出血"漏洞,就是OpenSSL中的一個bug.
openssl 給本身頒發證書的步驟:
前提:先建一個cert目錄,cd到該目錄,如下全部命令的當前路徑均爲該目錄
1. 生成私鑰KEY
1
|
openssl genrsa -des3 -out server.key 2048
|
這一步執行完之後,cert目錄下會生成server.key文件
2. 生成證書請求文件CSR
1
|
openssl req -new -key server.key -out server.csr
|
該命令先進入交互模式,讓你填一堆東西,參考下圖:
要注意的是Common Name這裏,要填寫成使用SSL證書(即:https協議)的域名或主機名,不然瀏覽器會認爲不安全。例如:若是之後打算用https://yjm-docker/xxx 這裏就填寫yjm-docker
3. 生成CA的證書
前面提過X.509證書的認證者老是CA或由CA指定的人,因此得先生成一個CA的證書
1
|
openssl req -new -x509 -key server.key -out ca.crt -days 3650
|
4. 最後用第3步的CA證書給本身頒發一個證書玩玩
1
2
3
|
openssl x509 -req -days 3650 -
in
server.csr \
-CA ca.crt -CAkey server.key \
-CAcreateserial -out server.crt
|
執行完之後,cert目錄下server.crt 就是咱們須要的證書。固然,若是要在google等瀏覽器顯示出安全的綠鎖標誌,本身頒發的證書確定很差使,得花錢向第三方權威證書頒發機構申請(即:第4步是交給權威機構來作,咱們只須要提交server.key、server.csr,哦,還有毛爺爺就行了)
刪除密碼記錄:
###### 1 生成2048bit的RSA私鑰文件typecodes.key [root@typecodes ssl]# openssl genrsa -des3 -out typecodes.key 2048 Generating RSA private key, 2048 bit long modulus .......................+++ ...............+++ e is 65537 (0x10001) Enter pass phrase for typecodes.key: Verifying - Enter pass phrase for typecodes.key: [輸入兩次相同的密碼] ###### 2 生成CSR證書籤名請求文件typecodes.csr [root@typecodes ssl]# openssl req -new -key typecodes.key -out typecodes.csr Enter pass phrase for typecodes.key: [輸入以前的密碼] You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:CN [國籍] State or Province Name (full name) []:GuangDong [省份] Locality Name (eg, city) [Default City]:ShenZhen [城市] Organization Name (eg, company) [Default Company Ltd]:TypeCodes.com [公司] Organizational Unit Name (eg, section) []:TypeCodes.com [行業] Common Name (eg, your name or your server's hostname) []:TypeCodes.com [本身的域名] Email Address []:vfhky@typecodes.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: [這裏不填] An optional company name []: [這裏不填] ###### 3 去掉密鑰文件typecodes.key的密碼 【強烈推薦】 [root@typecodes ssl]# cp typecodes.key typecodes.key.origin [root@typecodes ssl]# openssl rsa -in typecodes.key.origin -out typecodes.key Enter pass phrase for typecodes.key.origin: writing RSA key [輸入以前的密碼] ###### 4 固然也可用openssl經過私鑰和CSR本身生成簽名文件,可是可能不被瀏覽器承認,因此本步驟應該跳過 [root@typecodes ssl]# openssl x509 -req -days 365 -in typecodes.csr -signkey typecodes.key -out typecodes.crt Signature ok subject=/C=CN/ST=GuangDong/L=ShenZhen/O=TypeCodes.com/OU=TypeCodes.com/CN=TypeCodes.com/emailAddress=vfhky@typecodes.com Getting Private key ###### 5 查看上面4個步驟所產生的文件,其中typecodes.crt是不須要的 [root@typecodes ssl]# ls typecodes.crt typecodes.csr typecodes.key typecodes.key.origin