https--OpenSSL生成root CA及簽發證書
轉載: https://www.cnblogs.com/loleina/p/8418111.html
一、openssl 簡介
openssl 是目前最流行的 SSL 密碼庫工具,其提供了一個通用、健壯、功能完備的工具套件,用以支援SSL/TLS 協議的實現。官網: ,其中有3個主要的用途:1、密碼演算法庫(建立 RSA、DH、DSA key 引數,計算訊息摘要,使用各種 Cipher加密/解密) 2、金鑰和證照封裝管理功能(建立 X.509 證照、證照籤名請求(CSR)和CRLs(證照回收列表));3、SSL通訊API介面(SSL/TLS 客戶端以及伺服器的測試,處理S/MIME 或者加密郵件)。
二、安裝openssl(linux CentOS7 32位)
如果使用的是unix作業系統,可能安裝系統的時候,這個庫就已經有且存在了。但是在使用前,需要注意下當前openssl的庫的版本 。
openssl version OpenSSL 1.0.1 14 Mar 2012
因為版本1.0.1是一個很重要的風水嶺版本。因為1.0.1是第一個支援TLS1.1和1.2的版本。支援新的協議。作業系統的選擇也很重要,比如Ubuntu 12.04 LTS,客戶端不支援SSL2。這裡安裝以CentOS7系統為例:
A、 下載openssl庫檔案:
B、將下載的壓縮包放在根目錄下,解壓縮,進入解壓縮檔案(得到openssl-openssl-1.0.0資料夾)cd openssl-1.0.0
C、編譯前配置openssl,執行命令:./config --prefix=/usr/local/openssl,其中 ( --prefix )引數為欲安裝之目錄,也就是安裝後的檔案會出現在該目錄下。
D、編譯openssl,執行命令: make install
[root@b6e4cbd27773 /usr/local/openssl/ loading shared libraries: libssl.so. file: No such file or directory 2、解決方法有依賴沒裝libssl。在/etc/ld.so.conf檔案中寫入openssl庫檔案的搜尋路徑,使用修改後的conf生效即可:
echo "/usr/local/lib64" >> /etc/ld.so.conf
ldconfig -v
三、使用openssl生成RSA金鑰對
使用openssl的私鑰產生公鑰前,需要了解以下幾點:
1、key演算法:openssl 支援生成RSA,DSA,ECDSA的金鑰對,但是RSA是目前使用最普遍的。
2、Key長度:RSA的2048是公認較比較安全的key長度。
3、密碼(Passphrase):在key上使用密碼是一個可選值,但是一般都是強烈建議的(官網這樣寫的,實際專案中很多都沒有設定口令),這樣每次使用key檔案時,都需要輸入這個密碼才能使用,增強了其安全性,但是隨之而來的易用性也會變差。
使用genrsa命令來生成RSA key( 產生DSA其他演算法的key檔案,可以直接參考學習官網教程,在此處以常用的為例),2步驟能完成:
A、生成私鑰:
使用命令:openssl genrsa -aes128 -out fd.key 2048 。以下輸入了為這個key值設定了密碼,且密碼使用aes128加密儲存。
$ openssl genrsa -aes128 -out fd.key 2048
Generating RSA private key, 2048 bit long modulus
....+++...................................................................................+++e is 65537 (0x10001) Enter pass phrase for fd.key: ****************Verifying - Enter pass phrase for fd.key: ****************
這個key檔案就是私鑰檔案。可以檢視下檔案內容:
-----BEGIN RSA PRIVATE KEY-----Proc-Type: 4,ENCRYPTED DEK-Info: AES-128-CBC,01EC21976A463CE36E9DB59FF6AF689A vERmFJzsLeAEDqWdXX4rNwogJp+y95uTnw+bOjWRw1+O1qgGqxQXPtH3LWDUz1Ym mkpxmIwlSidVSUuUrrUzIL+V21EJ1W9iQ71SJoPOyzX7dYX5GCAwQm9Tsb40FhV/[21 lines removed...] 4phGTprEnEwrffRnYrt7khQwrJhNsw6TTtthMhx/UCJdpQdaLW/TuylaJMWL1JRW i321s5me5ej6Pr4fGccNOe7lZK+563d7v5znAx+Wo1C+F7YgF+g8LOQ8emC+6AVV -----END RSA PRIVATE KEY-----
B、生成公鑰:
使用命令:openssl rsa -in fd.key -pubout -out fd-public.key
openssl rsa -in fd.key -pubout -out fd-public.key Enter pass phrase for fd.key: ****************
檢視這個key檔案,就是公鑰:
$ cat fd-public.key -----BEGIN PUBLIC KEY-----MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnlccwQ9FRyJYHM8sFNsY PUHJHJzhJdwcS7kBptutf/L6OvoEAzCVHi/m0qAA4QM5BziZgnvv+FNnE3sgE5pz iovEHJ3C959mNQmpvnedXwfcOIlbrNqdISJiP0js6mDCzYjSO1NCQoy3UpYwvwj7 0ryR1F+abARehlts/Xs/PtX3VamrljiJN6JNgFICy3ZvEhLZEKxR7oob7TnyZDrj IHxBbqPNzeiqLCFLFPGgJPa0cH8DdovBTesvu7wr/ecsf8CYyUCdEwGkZh9DKtdU HFa9H8tWW2mX6uwYeHCnf2HTw0E8vjtOb8oYQxlQxtL7dpFyMgrpPOoOVkZZW/P0 NQIDAQAB -----END PUBLIC KEY-----
三、獲取權威機構頒發證照步驟
獲取權威機構頒發的證照,需要先得到私鑰的key檔案(.key),然後使用私鑰的key檔案生成sign req 檔案(.csr),最後把csr檔案發給權威機構,等待權威機構認證,認證成功後,會返回證照檔案(.crt)。
A:生成私鑰key。
與第二節使用openssl生成RSA金鑰對的步驟A一致。使用命令:openssl genrsa -aes128 -out fd.key 2048
B:私鑰的key檔案生成sign req 檔案(.csr)
生成csr檔案時,需要填寫一些關於待籤人或者公司的一些資訊,比如國家名,省份名,組織機構名,主機名,email名,有些資訊可以不填寫,使用.標識。
使用命令: openssl req -new -key fd.key -out fd.csr。過程如下:
Enter pass phrase for fd.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) [AU]:GB State or Province Name (full name) [Some-State]:. Locality Name (eg, city) []:London Organization Name (eg, company) [Internet Widgits Pty Ltd]:Feisty Duck Ltd Organizational Unit Name (eg, section) []: Common Name (e.g. server FQDN or YOUR name) []: Email Address []:webmaster@feistyduck.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
C、把csr檔案發給權威機構,等待權威機構認證,交費獲取證照即可。
四、OpenSSL生成root CA及簽發證照
有時候,使用SSL協議是自己內部伺服器使用的,這時可以不必去找第三方權威的CA機構做證照,可以做自簽證照(自己建立root CA(非權威))主要有以下三個步驟。
A:建立openssl.cnf在使用default-ca時需要使用的SSL的工作目錄(第一次必須要設定)。
1、檢視openssl的配置檔案:
OpenSSL 1.0.1e-fips 17 Nov 2016built on: Fri Nov 18 16:28:23 CST 2016platform: linux-x86_64 options: bn(64,64) md2(int) rc4(16x,int) des(idx,cisc,16,int) idea(int) blowfish(idx) compiler: gcc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DKRB5_MIT -m64 -DL_ENDIAN -DTERMIO -Wall -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -Wa,--noexecstack -DPURIFY -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM OPENSSLDIR: "/etc/pki/tls"engines: rdrand dynamic
2、找到OPENSSLDIR: "/etc/pki/tls"的配置檔案openssl.cnf
根據配置檔案下的[ CA_default ]節點預設值,建立對應資料夾和檔案。
按順序在/etc/pki/CA下執行以下命令建立資料夾和檔案:
其中,certs:存放已頒發的證照;newcerts:存放CA指令生成的新證照;private:存放私鑰;crl:存放已吊銷的整數;index.txt:penSSL定義的已簽發證照的文字資料庫檔案,這個檔案通常在初始化的時候是空的;serial:證照籤發時使用的序列號參考檔案,該檔案的序列號是以16進位制格式進行存放的,該檔案必須提供並且包含一個有效的序列號。
執行完後,當前目錄為:
[tt@SWEBMYVMM000210 /etc/pki/CA]$ll total 20drwxrwxrwx 2 root root 4096 Mar 12 11:08 certs drwxrwxrwx 2 root root 4096 Nov 18 2016 crl-rwxrwxrwx 1 root root 0 Mar 12 11:06 index.txt drwxrwxrwx 2 root root 4096 Nov 18 2016 newcerts drwxrwxrwx 2 root root 4096 Nov 18 2016 private-rwxrwxrwx 1 root root 33 Mar 12 11:12 serial
小插曲:使用自簽證照籤名使用者證照時報錯,檔案不存在 1、問題描述: $ openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key Using configuration from /etc/pki/tls/openssl.cnf /etc/pki/CA/serial: No such file or directory
139996157081440:error:02001002:system library:fopen:No such file or directory:bss_file.c:398:fopen('/etc/pki/CA/serial','r')
139996157081440:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:400:
2、問題解決: 如果不設定工作目錄,後續第三步的最後一小步,使用openssl的ca命令產生使用者的ca證照時會報錯,建立openssl.cnf在使用default-ca時需要使用的SSL的工作目錄即可。
B:生成CA根證照(root ca證照)。
步驟:生成CA私鑰(.key)-->生成CA證照請求(.csr)-->自簽名得到根證照(.crt)(CA給自已頒發的證照)。
# Generate CA private key --->ca.key
openssl genrsa -out ca.key 2048
# Generate CSR --->ca.csr
openssl req -new -key ca.key -out ca.csr
# Generate Self Signed certificate(CA 根證照) ---> ca.crt
openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt
小插曲:直接根據key檔案獲取CA根證照的命令
方法:在得到key檔案後,執行以下命令:
openssl req -new -x509 -days 365 -key fd.key -out fd.crt
如果不想填寫那些註冊資訊,執行以下命令:
openssl req -new -x509 -days 365 -key fd.key -out fd.crt subj "/C=GB/L=London/O=Feisty Duck Ltd/CN=
C:用自籤根證照 ca.crt 給使用者證照籤名。
步驟:生成私鑰(.key)-->生成證照請求(.csr)-->用CA根證照籤名得到證照(.crt)
# private key --->server.key
openssl genrsa -out server.key 1024 # generate csr --->server.csr openssl req -new -key server.key -out server.csr
# generate certificate --->server.crt
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key
小插曲:用CA根證照籤名時報錯,The mandatory stateOrProvinceName field was missing 1、問題描述:sudo openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key Using configuration from /etc/pki/tls/openssl.cnf Check that the request matches the signature Signature ok The mandatory stateOrProvinceName field was missing2、出現原因:openssl.cnf中CA policy有三個match,必須要填一樣的,或者改成optional 3、解決方法:修改配置檔案,修改後為:
# For the CA policy
[ policy_match ]
countryName = optional
stateOrProvinceName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
D:證照的簡單使用。
把server.crt以及server.key儲存在伺服器端等待程式載入使用;把ca.key儲存在客戶端,如果客戶端需要驗證伺服器端發的證照時使用。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26250550/viewspace-2564685/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 通過Go語言建立CA與簽發證書Go
- 使用OpenSSL建立生成CA證書、伺服器、客戶端證書及金鑰伺服器客戶端
- openssl生成自簽名證書
- 生成自簽名SSL證書
- 根證書 CA
- openssl 簽發證書
- Charles 匯出證書、簽發證書
- 使用 openssl 命令列構建 CA 及證書命令列
- ca 證書機制
- 使用OpenSSL生成自簽名SSL證書
- CA證書伺服器(6)利用CA證書配置安全Web站點伺服器Web
- fabric-ca載入openssl生成的ecdsa標準證書
- 【原】CA證書的理解
- 細說 CA 和證書
- 數字證書認證(CA)中心
- OpenSSL 生成 RootCA (根證書)並自簽署證書(支援 IP 地址)
- 理解加密演算法(三)——建立CA機構,簽發證書並開始TLS通訊加密演算法TLS
- PKI/CA與數字證書
- TAM和CA證書的整合
- android 安裝CA證書Android
- windows下使用makecert命令生成自簽名證書Windows
- Net8 使用BouncyCastle 生成自簽名證書AST
- 建立和管理一個 CA 及證書的生命週期
- 為IP地址簽發SSL證書
- 本地簽發ssl證書(https)HTTP
- 自己成為一個證書頒發機構(CA)
- 程式碼簽名證書原理及好處
- Shell指令碼實現生成SSL自簽署證書指令碼
- .NET 6學習筆記(8)生成自簽證書筆記
- 基於CFSSL工具建立CA證書,服務端證書,客戶端證書服務端客戶端
- Mac Store 證書籤名大清理及證書生成過程Mac
- iOS開發證書"此證書的簽發者無效"解決方法iOS
- JB的測試之旅-IOS證書及簽名iOS
- 使用 OpenSSL 建立私有 CA:1 根證書
- CA數字證書包括哪些內容?
- 申請程式碼簽名證書如何生成CSR檔案
- ios簽名證書:什麼是證書?iOS
- CA/B 論壇10月會議 S/MIME證書和程式碼簽名證書的新基線要求提上日程