Linux下生成openssl自簽名證書

校驗證書是否被 CA 證書籤名,正確的狀況:

$ openssl verify -CAfile /etc/kubernetes/cert/ca.pem /etc/kubernetes/cert/kubernetes.pem
/etc/kubernetes/cert/kubernetes.pem: OK

------------------------------------------------------------------------------html

把生成的ca證書和去除密碼的私鑰文件部署到web服務器後,執行如下命令驗證: nginx

  • 不加CA證書驗證git

    openssl s_client -connect demo.rancher.com:443 -servername demo.rancher.com

    image-20180805213034249

  • 添加CA證書驗證web

    openssl s_client -connect demo.rancher.com:443 -servername demo.rancher.com -CAfile server-ca.crt

    image-20180805213123781

 

---------------------------------------------------------------------------------算法

Nginx 配置支持HTTPSvim

vim nginx.confwindows

server {
    listen 80;
    listen 443 ssl;
    server_name  *.*.com
    ...
#ssl on; #同時開啓http和https時,不須要開啓此項! ssl_certificate
/data/mysite/htdocs/server.crt; ssl_certificate_key /data/mysite/htdocs/server.key; ... }

http 與https並存 瀏覽器

nginx配置https的官網連接:http://nginx.org/en/docs/http/configuring_https_servers.html安全

-------------------------------------------------------------------------------------------------服務器

SSL 安全證書能夠本身生成,也能夠經過第三方的 CA ( Certification Authority )認證中心付費申請頒發。

SSL 安全證書包括:

一、CA 證書,也叫根證書或中間級證書。單向認證的 https , CA 證書是可選的。主要目的是使證書構成一個證書鏈,以達到瀏覽器信任證書的目的。若是使用了 CA 證書,服務器證書和客戶證書都使用 CA 證書來簽名。若是不安裝 CA 證書,瀏覽器默認認爲是不安全的。

二、服務器證書。必選。經過服務器私鑰,生成證書請求文件 CSR ,再經過 CA 證書籤名生成服務器證書。

三、客戶證書。可選。若是有客戶證書,就是雙向認證的 HTTPS ,不然就是單向認證的 HTTPS 。生成步驟和服務器證書相似。

上面幾種證書均可以本身生成。商業上,通常本身提供服務器或客戶證書端的私鑰和證書請求 CSR ,或向第三方機構付費申請獲得經過 CA 證書籤名的服務器證書和客戶證書。

 

準備工做:

        在操做前,最好將openssl.cnf文件打開,查看其dir路徑將其修改成dir = /home/wjoyxt/demoCA /,不然下面的步驟會提示路徑沒法找到。

        一、手動在當前目錄/home/wjoyxt建立一個CA目錄結構:

        $ mkdir -p ./demoCA/newcerts

        二、建立空文件:

        $ touch  demoCA/index.txt

        三、建立並向文件中寫入01:

       $ echo 01 > demoCA/serial

 

PKI(Public Key Infrastructure ) 即"公鑰基礎設施"
RSA RSA公鑰加密算法RSA是目前最有影響力的公鑰加密算法,它可以抵抗到目前爲止已知的絕大多數密碼攻擊,已被ISO推薦爲公鑰數據加密標準
CSR ( Certificate Signing Request )是一個證書籤名請求,在申請證書以前,首先要在 WEB 服務器上生成 CSR ,並將其提交給 CA 認證中心, CA 才能給您簽發 SSL 服務器證書。能夠這樣認爲, CSR 就是一個在您服務器上生成的證書。
CA中心又稱CA機構,即證書受權中心(Certificate Authority ),或稱證書受權機構,做爲電子商務交易中受信任的第三方,承擔公鑰體系中公鑰的合法性檢驗的責任
CA中心爲每一個使用公開密鑰的用戶發放一個數字證書,數字證書的做用是證實證書中列出的用戶合法擁有證書中列出的公開密鑰。CA機構的數字簽名使得攻擊者不能僞造和篡改證書。
數字安全證書就是標誌網絡用戶身份信息的一系列數據,用來在網絡通信中識別通信各方的身份,即要在Internet上解決"我是誰"的問題,就如同現實中咱們每個人都要擁有一張證實我的身份的身份證或駕駛執照同樣,以代表咱們的身份或某種資格.
 

1、首先開始創建根證書
一、生成CA的私鑰(key文件)
      openssl genrsa -out ca.key 1024
      這來細細講一下這條命令: openssl指進入openssl環境,genrsaopenssl中的一個小應用程序,用來產生rsa私鑰。-des3是指將產生的私鑰用triple DES進行加密。這是個可選項,還有-des -idea都是對稱加密算法,隨你本身選擇. -out就是指定輸出了,若是不加這個選項的話,就會將輸出發到標準輸出中.2048指私鑰的長度,單們是bit,默認是512
 
       openssl genrsa -des3 -out ca.key 1024  爲私鑰加密碼
      openssl rsa -in server.key -out ca.key 爲私鑰移除密碼  
 

二、填寫證書申請表。(省略)
       openssl req -new -key ca.key -out ca.csr  -config /etc/pki/tls/openssl.cnf 
       生成csr文件並交給CA簽名後纔可造成證書,屏幕上將有提示,依照其指示一步一步輸入要求的我的信息便可
       這個命令將會生成一個證書請求,固然,用到了前面生成的密鑰ca.key文件,這裏將生成一個新的文件ca.csr,即一個證書請求文件,你能夠拿着這個文件去數字證書頒發機構(即CA)申請一個數字證書。CA會給你一個新的文件ca.crt ,那纔是你的數字證書。
 
 
 

三、本身簽訂根籤書

      openssl req -new -x509  -days 1000 -key ca.key -out ca.crt  -config /etc/pki/tls/openssl.cnf -subj "/C=cn/ST=beijing/O=zuweihui/CN=www.abc.com" 

Country Name (2 letter code) [AU]:(國家)                                               ----必填     C
State or Province Name (full name) [Some-State]:(洲/省)                          ----必填     ST
Locality Name (eg, city) []:(城/鎮)                                                         ----可爲空   L
Organization Name (eg, company) [Internet Widgits Pty Ltd]:(組織名)           ----必填      O
Organizational Unit Name (eg, section) []:(單位名)                                     ----可爲空   OU
Common Name (eg, YOUR name) []:(httpd-ssl.conf中的ServerName 名稱)       ----必填      CN (此處簽署根證書時可不填,簽訂服務器端證書時必填)
Email Address []:(郵箱)                                                                         ----可爲空

      若是是本身作測試,那麼證書的申請機構和頒發機構都是本身。就能夠用上面這個命令來生成證書。( X.509是一種很是通用的證書格式)
  

2、製作服務器端的證書並用ca簽名
1、生成服務器端rsa私鑰
      openssl genrsa -out server.key 1024

二、生成服務器證書請求( CSR )
openssl req -new  -key server.key -out server.csr -config 
/etc/pki/tls/openssl.cnf   -subj "/C=cn/ST=beijing/O=zuweihui/CN=www.def.com"
 
      國家、省和組織名要與上面CA證書一致(區分大小寫),不然簽署時必然要失敗
      須要依次輸入國家,地區,組織,email。最重要的是有一個Common Name  即CN,能夠寫你的名字或者域名。若是爲了https申請,這個必須和域名或對外訪問IP相吻合,不然會引起瀏覽器警報。生成的csr文件交給CA簽名後造成服務端本身的證書。

三、用生成的CA的證書爲剛纔生成的server.csr或client.csr文件簽名
      openssl ca -keyfile ca.key  -cert ca.crt -in server.csr -out server.crt  -config /etc/pki/tls/openssl.cnf
 
查看建立的證書信息:
openssl x509 -noout -text -in *.crt 
openssl req -noout -text -in *.csr
openssl rsa -noout -text -in *.key
 


3、製作客戶端的證書並用ca簽名:(與生成服務器證書差很少)
須要注意的是:
        這個certificate是BASE64形式的,要轉成 PKCS#12/PFX 格式才能安裝到瀏覽器上.因此還要進行轉換一下

        openssl pkcs12 -export -in client.crt  -inkey client.key -out  client.pfx
 

執行後提示以下:
Enter pass phrase for client.key:
Enter Export Password: # 設置client.pfx密碼
Verifying - Enter Export Password:

另:
       client 使用的文件有:ca.crt,client.crt,client.key,client.pfx
       server 使用的文件有:ca.crt,server.crt,server.key

證書安裝及使用
把剛纔生成的證書:根證書ca.crt和客戶證書client.crt(client.pfx)安裝到客戶端, ca.crt安裝到信任的機構,client.crt直接在windows安裝或安裝到我的證書位置,而後用IP訪問HTTP和https服務器。在IE中咱們通常導入client.pfx證書,導入時會提示上面設置的密碼。
----------------------------------------------------------------------------------------------------------------------------------------
另:
openssl  passwd  [-crypt] [-1] [-apr1] [-salt string] [-in file] [-stdin]  [-quiet] [-table] {password} 
    
說明: 
    本指令計算用來哈希某個密碼,也能夠用來哈希文件內容。
 
    本指令支持三種哈希算法: 
    UNIX系統的標準哈希算法(crypt) 
    MD5-based BSD(1) 
    
    OPTIONS 
   -crypt -1 -apr1 
    這三個option中任意選擇一個做爲哈希算法,缺省的是-crypt 
    -salt string 
    輸入做爲salt的字符串。 
    -in file 
    要哈希的文件名稱 
    -stdin 
    從標準輸入讀入密碼 
    -quiet 
    當從標準輸入讀密碼,輸入的密碼太長的時候,程序將自動解短它。這個option的 
    set將不在狀況下發出警告。 
    -table 
    在輸出列的時候,先輸出明文的密碼,而後輸出一個TAB,再輸出哈希值. 
    舉例時間: 
    openssl passwd -crypt -salt xx password xxj31ZMTZzkVA. 
    openssl passwd -1 -salt xxxxxxxx password $1$xxxxxxxx$8XJIcl6ZXqBMCK0qFevqT1. 
    openssl passwd -apr1 -salt xxxxxxxx password $apr1$xxxxxxxx$dxHfLAsjHkDRmG83UXe8K0
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
問題分析:
 
openssl TXT_DB error number 2 failed to update database

產生的緣由是:

This thing happens when certificates share common data. You cannot have two certificates that look otherwise the same.

方法一:

修改demoCA下 index.txt.attr

unique_subject = yes  

 改成 

unique_subject = no  

 

 方法二:

刪除demoCA下的index.txt,並再touch下 

  1. rm index.txt  
  2. touch index.txt  
相關文章
相關標籤/搜索