openssl生成自簽名證書-流程


轉:https://www.jianshu.com/p/0e9ee7ed6c1d

通常自簽的證書等,用來給內部啟用https。

自己建一個CA,然后對自己的請求文件進行認證然后生成證書,私鑰和證書,一共倆

ubuntu上一般都自帶安裝了OpenSSL

ubuntu:~$ openssl
OpenSSL> version
OpenSSL 1.1.1  11 Sep 2018
OpenSSL>help
Standard commands # 標准命令
asn1parse         ca                ciphers           cms               
crl               crl2pkcs7         dgst              dhparam           
dsa               dsaparam          ec                ecparam           
enc               engine            errstr            gendsa            
genpkey           genrsa            help              list              
nseq              ocsp              passwd            pkcs12            
pkcs7             pkcs8             pkey              pkeyparam         
pkeyutl           prime             rand              rehash            
req               rsa               rsautl            s_client          
s_server          s_time            sess_id           smime             
speed             spkac             srp               storeutl          
ts                verify            version           x509              

Message Digest commands (see the `dgst' command for more details)
blake2b512        blake2s256        gost              md4               
md5               rmd160            sha1              sha224            
sha256            sha3-224          sha3-256          sha3-384          
sha3-512          sha384            sha512            sha512-224        
sha512-256        shake128          shake256          sm3               

Cipher commands (see the `enc' command for more details)
aes-128-cbc       aes-128-ecb       aes-192-cbc       aes-192-ecb       
aes-256-cbc       aes-256-ecb       aria-128-cbc      aria-128-cfb      
aria-128-cfb1     aria-128-cfb8     aria-128-ctr      aria-128-ecb      
aria-128-ofb      aria-192-cbc      aria-192-cfb      aria-192-cfb1     
aria-192-cfb8     aria-192-ctr      aria-192-ecb      aria-192-ofb      
aria-256-cbc      aria-256-cfb      aria-256-cfb1     aria-256-cfb8     
aria-256-ctr      aria-256-ecb      aria-256-ofb      base64            
bf                bf-cbc            bf-cfb            bf-ecb            
bf-ofb            camellia-128-cbc  camellia-128-ecb  camellia-192-cbc  
camellia-192-ecb  camellia-256-cbc  camellia-256-ecb  cast              
cast-cbc          cast5-cbc         cast5-cfb         cast5-ecb         
cast5-ofb         des               des-cbc           des-cfb           
des-ecb           des-ede           des-ede-cbc       des-ede-cfb       
des-ede-ofb       des-ede3          des-ede3-cbc      des-ede3-cfb      
des-ede3-ofb      des-ofb           des3              desx              
rc2               rc2-40-cbc        rc2-64-cbc        rc2-cbc           
rc2-cfb           rc2-ecb           rc2-ofb           rc4               
rc4-40            seed              seed-cbc          seed-cfb          
seed-ecb          seed-ofb          sm4-cbc           sm4-cfb           
sm4-ctr           sm4-ecb           sm4-ofb           

1.基本概念

  • CA:認證機構。有自己的證書,可以拿自己的證書給別人簽名然后收錢,這個星球上的CA被幾家說英語的人壟斷了。在這里我們會虛擬出一個CA機構,然后用他來給自己的證書認證簽名。
  • (網站)證書 :發送給客戶端的證書,其中大部分是公鑰。是一個包含自己網站的公鑰、認證、簽名等信息的文件。
  • (網站)私鑰 :服務器留存的解密私鑰(server)
    注意區分 CA機構的證書(可以拿來給其他網站證書簽名)和 自己網站的證書(不可以),不一樣

2.基本流程

    1. 搞一個虛擬的CA機構,生成一個證書
    1. 生成一個自己的密鑰,然后填寫證書認證申請,拿給上面的CA機構去簽名
    1. 於是就得到了自(自建CA機構認證的)簽名證書

2.1 首先,虛構一個CA認證機構出來

# 生成CA認證機構的證書密鑰key
# 需要設置密碼,輸入兩次
openssl> genrsa -des3 -out ca.key 1024

# 去除密鑰里的密碼(可選)
# 這里需要再輸入一次原來設的密碼
openssl> rsa -in ca.key -out ca.key

# 用私鑰ca.key生成CA認證機構的證書ca.crt
# 其實就是相當於用私鑰生成公鑰,再把公鑰包裝成證書
openssl> req -new -x509 -key ca.key -out ca.crt -days 365
# 這個證書ca.crt有的又稱為"根證書",因為可以用來認證其他證書

2.2其次,才是生成網站的證書

用上面那個虛構出來的CA機構來認證,免費

# 生成自己網站的密鑰server.key
openssl> genrsa -des3 -out server.key 1024

# 生成自己網站證書的請求文件
# 如果找外面的CA機構認證,也是發個請求文件給他們
# 這個私鑰就包含在請求文件中了,認證機構要用它來生成網站的公鑰,然后包裝成一個證書
openssl> req -new -key server.key -out server.csr

# 使用虛擬的CA認證機構的證書ca.crt,來對自己網站的證書請求文件server.csr進行處理,生成簽名后的證書server.crt
# 注意設置序列號和有效期(一般都設1年)
openssl> x509 -req -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt -days 365

至此,私鑰server.key和證書server.crt已全部生成完畢,可以放到網站源代碼中去用了。

3.補充

其實后綴名不影響文件的實質內容的,內容都可以文本打開看

  • 例如生成的ca.key文件,輸入兩次密碼,然后再查看其內容:
OpenSSL> genrsa -des3 -out ca.key 1024
Generating RSA private key, 1024 bit long modulus (2 primes)
....+++++
...........................................................................+++++
e is 65537 (0x010001)
Enter pass phrase for ca.key:
Verifying - Enter pass phrase for ca.key:
OpenSSL> exit
ubuntu:~/web/ssl$ ls
ca.key
ubuntu:~/web/ssl$ cat ca.key
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,6D519E92415BEE33

UcZyq1NkoodzdWBHq37G2+y+Q/QigaPmXdNjZA7rBbz17VVqB1JrU11tbFo5BDZV
...
-----END RSA PRIVATE KEY-----
ubuntu:~/web/ssl$
  • 再如生成ca.crt證書文件:
OpenSSL> req -new -x509 -key ca.key -out ca.crt -days 365
Can't load /home/xqq/.rnd into RNG
139920876560832:error:2406F079:random number generator:RAND_load_file:Cannot open file:../crypto/rand/randfile.c:88:Filename=/home/xqq/.rnd
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]:cn
State or Province Name (full name) [Some-State]:spn
Locality Name (eg, city) []:ln
Organization Name (eg, company) [Internet Widgits Pty Ltd]:on
Organizational Unit Name (eg, section) []:oun
Common Name (e.g. server FQDN or YOUR name) []:cn
Email Address []:ea
OpenSSL> exit

ubuntu:~/web/ssl$ ls
ca.key ca.crt ca.lol  # ca.lol是我自己亂起的擴展名

# ca.lol
ubuntu:~/web/ssl$ cat ca.lol
-----BEGIN CERTIFICATE-----
MIICqjCCAhOgAwIBAgIUAOsXW5KDRNvBDTLaIreadCJVnn4wDQYJKoZIhvcNAQEL
...
-----END CERTIFICATE-----

# ca.key
xqq@VM-0-4-ubuntu:~/web/ssl$ cat ca.key
-----BEGIN RSA PRIVATE KEY-----
MIICXgIBAAKBgQCxImyGkSj2rB7zSNSM/2h4dg5tpJNGwJDQLE/PNKQtkorMgrbI
...
-----END RSA PRIVATE KEY-----
xqq@VM-0-4-ubuntu:~/web/ssl$

擴展名並不影響密鑰文件的內容


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM