Windows XP Windows 7 Windows 2003 Windows Vista Windows教程綜合 Linux 系統教程
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟件教程
 Windows教程網 >> Windows教程綜合 >> 系統常見問題解答 >> 使用OpenSSL工具制作X.509證書的方法及其注意事項總結

使用OpenSSL工具制作X.509證書的方法及其注意事項總結

日期:2017/1/20 17:47:09      編輯:系統常見問題解答
一、步驟簡記 // 生成頂級CA的公鑰證書和私鑰文件,有效期10年(RSA 1024bits,默認) openssl req -new -x509 -days 3650 -keyout CARoot1024.key -out CARoot1024.crt // 為頂級CA的私鑰文件去除保護口令 openssl rsa -in CARoot1024.key -out CARoot1024.key // 生成頂級CA的公鑰證書和私鑰文件,有效期15年(RSA 2048bits,指定) openssl req -newkey rsa:2048 -x509 -days 5480 -keyout CARoot2048.key -out CARoot2048.crt // 為頂級CA的私鑰文件去除保護口令 openssl rsa -in CARoot2048.key -out CARoot2048.key // 為應用證書/中級證書生成私鑰文件 openssl genrsa -out app.key 2048 // 根據私鑰文件,為應用證書/中級證書生成 csr 文件(證書請求文件) openssl req -new -key app.key -out app.csr // 使用CA的公私鑰文件給 csr 文件簽名,生成應用證書,有效期5年 openssl ca -in app.csr -out app.crt -cert CARoot1024.crt -keyfile CARoot1024.key -days 1826 -policy policy_anything // 使用CA的公私鑰文件給 csr 文件簽名,生成中級證書,有效期5年 openssl ca -extensions v3_ca -in app.csr -out app.crt -cert CARoot1024.crt -keyfile CARoot1024.key -days 1826 -policy policy_anything 以上是生成根證書與應用證書過程中要用到的所有命令,根據生成目標不同,分為三組。其中,前面兩組都用於生成自簽名的頂級CA(區別只在於密鑰長度不同),實際應用中只需根據需求選擇一組即可。     最後一組用於生成非自簽名的證書,包括中級證書與應用證書。所謂中級證書,是具有繼續頒發下級證書權限的子CA,而本文中所說的應用證書,特指不能用來繼續頒發下級證書,只能用來證明個體身份的證書。頂級CA在簽發二者的時候,只是多少一個 -extensions v3_ca 選項的區別,這個選項賦予被簽發的證書繼續簽發下級證書的權力。     二、各步詳解 2.1 生成自簽名根證書(即頂級CA) 典型示例:openssl req -new-x509 -days5480 -keyoutCA.key -outCA.crt     [1] 命令選項和參數解讀   示例中,各選項(及參數)的意義如下:   req 使用openssl的req子命令 -new 生成新的證書請求 -x509 生成自簽名證書 -days 5480 自簽名證書的有效期5480天(15年)【僅當使用了 -x509 選項後有效】 -keyout CA.key 私鑰文件名指定為CA.key【若為運行前就已有的私鑰文件且原名不是CA.key,則改名為CA.key;否則新生成的私鑰文件命名為CA.key】 -out CA.crt 指定輸出所生成自簽名證書的信息到文件,且文件名為CA.crt【建議不要省略】 其中,-days,-keyout 兩個選項可以省略,省略的話使用默認值,有效期默認為 30 天【由程序內部在變量初始化的時候指定,與配置文件無關】,私鑰文件名的默認值由配置文件 openssl.cnf 中相關條目指定,沒改過的話為 privkey.pem。   選項 -out 若是省略的話,openssl不會以文件形式輸出生成的 證書/證書請求,而是會默認將文件的信息直接打印到屏幕上,這在大多數情況下,是不符合我們要求的。所以建議這個選項最好不要省略!   req子命令可以通過 -key 選項為證書請求指定使用一個已存在的私鑰文件。但在示例中的情況下,雖然使用了-new 和 -x509兩個選項,但沒有使用 -key 選項,這時,req子命令會自動為自簽名證書生成一個RSA私鑰,密鑰長度的默認值由配置文件 openssl.cnf 中的相關條目指定,沒改過的話為 1024 bits。   [2] 關於私鑰文件加密口令的指定   運行中會提示輸入加密口令,如下:   writing new private key to 'CA.key' Enter PEM pass phrase: Verifying - Enter PEM pass phrase: 此口令用於加密私鑰文件 CA.key 中的私鑰信息,如果不想在運行過程中還要輸入加密口令,則可以使用選項 -passout 在命令中直接指定。選項 -passout 的使用形式為:   -passoutarg   其中,arg是選項 -passout 的參數,其格式有多種,詳參《OpenSSL官方文檔》中關於"PASS_PHRASE_ARGUMENTS"的介紹。   本小節典型示例中的命令,可以用選項 -passout 改造如下:   openssl req -new-x509 -days5480 -keyoutCA.key -out CA.crt-passoutpass:1314   由於Linux系統中可以使用history命令查看歷史指令記錄,所以出於安全方面的考量,一般如非必要,不建議在命令中直接指定口令。這與mysql登錄的時候不在 -p 選項裡直接指定登錄口令的原因是一致的。   [3] 關於證書請求文件中的DN字段   運行中會提示輸入一些 Distinguished Name fields,即證書的識別名信息字段,簡稱為DN字段,如下:   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) [GB]:US State or Province Name (full name) [Berkshire]:California Locality Name (eg, city) [Newbury]: Organization Name (eg, company) [My Company Ltd]:GeoAuth Inc. Organizational Unit Name (eg, section) []:. Common Name (eg, your name or your server's hostname) []:Authentication Global Root Email Address []:. 這些DN字段大部分有默認值,默認值由配置文件 openssl.cnf中相關條目指定。如要在某一個DN字段使用默認值,則無需輸入任何信息,直接點擊"Enter"鍵;如果確實某個DN字段的值要置為空,則輸入一個 '.' 後,點擊"Enter"鍵。   這些DN字段主要是拿來識別證書持有者身份的,下表是關於它們的縮寫、說明和一些填寫說明。【此部分參考了互動百科的SSL條目】 DN字段名 縮寫 說明 填寫要求 Country Name C 證書持有者所在國家 要求填寫國家代碼,用2個字母表示 State or Province Name ST 證書持有者所在州或省份 填寫全稱,可省略不填 Locality Name L 證書持有者所在城市 可省略不填 Organization Name O 證書持有者所屬組織或公司 最好還是填一下 Organizational Unit Name OU 證書持有者所屬部門 可省略不填 Common Name CN 證書持有者的通用名 必填。
對於非應用證書,它應該在一定程度上具有惟一性;
對於應用證書,一般填寫服務器域名或通配符樣式的域名。 Email Address   證書持有者的通信郵箱 可省略不填  表2-1 DN字段的說明 
Copyright © Windows教程網 All Rights Reserved