本文旨在利用開源openssl軟件,在Linux(或UNIX/Cygwin)下創(chuàng)建一個(gè)簡單的CA,。我們可以利用這個(gè)CA進(jìn)行PKI,、數(shù)字證書相關(guān)的測(cè)試。比如,,在測(cè)試用Tomcat或Apache構(gòu)建HTTPS雙向認(rèn)證時(shí),,我們可以利用自己建立的測(cè)試CA來為服務(wù)器端頒發(fā)服務(wù)器數(shù)字證書,為客戶端(瀏覽器)生成文件形式的數(shù)字證書(可以同時(shí)利用openssl生成客戶端私鑰),。 該簡單的CA將建立在用戶自己的目錄下($HOME/testca),,無需超級(jí)用戶(root)權(quán)限。 一. 創(chuàng)建CA 1. 創(chuàng)建CA需要用到的目錄和文件: 執(zhí)行命令如下: mkdir "$HOME/testca" cd "$HOME/testca" mkdir newcerts private conf chmod g-rwx,o-rwx private echo "01" > serial touch index.txt 說明: $HOME/testca為待建CA的主目錄,。其中newcerts子目錄將存放CA簽署(頒發(fā))過的數(shù)字證書(證書備份目錄),。而private目錄用于存放CA的私鑰。目錄conf只是用于存放一些簡化參數(shù)用的配置文件,。 文件serial和index.txt分別用于存放下一個(gè)證書的序列號(hào)和證書信息數(shù)據(jù)庫,。 當(dāng)然,偷懶起見,,可以只用按照本文操作即可,,不一定需要關(guān)心各個(gè)目錄和文件的作用。 2. 生成CA的私鑰和自簽名證書(即根證書) 創(chuàng)建文件: vi "$HOME/testca/conf/gentestca.conf" 文件內(nèi)容如下: #################################### [ req ] default_keyfile = $ENV::HOME/testca/private/cakey.pem default_md = md5 prompt = no distinguished_name = ca_distinguished_name x509_extensions = ca_extensions [ ca_distinguished_name ] organizationName = TestOrg organizationalUnitName = TestDepartment commonName = TestCA emailAddress = [email protected] [ ca_extensions ] basicConstraints = CA:true ######################################## 然后執(zhí)行命令如下: cd "$HOME/testca" openssl req -x509 -newkey rsa:2048 -out cacert.pem -outform PEM -days 2190 -config "$HOME/testca/conf/gentestca.conf" 執(zhí)行過程中需要輸入CA私鑰的保護(hù)密碼,,假設(shè)我們輸入密碼: 888888 可以用如下命令查看一下CA自己證書的內(nèi)容 openssl x509 -in cacert.pem -text -noout 3. 創(chuàng)建一個(gè)配置文件,,以便后續(xù)CA日常操作中使用: vi "$HOME/testca/conf/testca.conf" 文件內(nèi)容如下: #################################### [ ca ] default_ca = testca # The default ca section [ testca ] dir = $ENV::HOME/testca # top dir database = $dir/index.txt # index file. new_certs_dir = $dir/newcerts # new certs dir certificate = $dir/cacert.pem # The CA cert serial = $dir/serial # serial no file private_key = $dir/private/cakey.pem # CA private key RANDFILE = $dir/private/.rand # random number file default_days = 365 # how long to certify for default_crl_days= 30 # how long before next CRL default_md = md5 # message digest method to use unique_subject = no # Set to 'no' to allow creation of # several ctificates with same subject. policy = policy_any # default policy [ policy_any ] countryName = optional stateOrProvinceName = optional localityName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional ######################################## 二. CA的日常操作 1. 根據(jù)證書申請(qǐng)請(qǐng)求簽發(fā)證書 假設(shè)收到一個(gè)證書請(qǐng)求文件名為req.pem,文件格式應(yīng)該是PKCS#10格式(標(biāo)準(zhǔn)證書請(qǐng)求格式),。 首先可以查看一下證書請(qǐng)求的內(nèi)容,,執(zhí)行命令: openssl req -in req.pem -text -noout 將看到證書請(qǐng)求的內(nèi)容,,包括請(qǐng)求者唯一的名字(DN)、公鑰信息(可能還有一組擴(kuò)展的可選屬性),。 執(zhí)行簽發(fā)命令: openssl ca -in req.pem -out cert.pem -config "$HOME/testca/conf/testca.conf" 執(zhí)行過程中會(huì)要求輸入訪問CA的私鑰密碼(剛才設(shè)置的888888),。 完成上一步后,簽發(fā)好的證書就是cert.pem,,另外$HOME/testca/newcerts里也會(huì)有一個(gè)相同的證書副本(文件名為證書序列號(hào)),。 你可以執(zhí)行以下語句來查看生成的證書的內(nèi)容: openssl x509 -in cert.pem -text -noout 2. 吊銷證書(作廢證書) 一般由于用戶私鑰泄露等情況才需要吊銷一個(gè)未過期的證書,。(當(dāng)然我們用本測(cè)試CA時(shí)其時(shí)很少用到該命令,,除非專門用于測(cè)試吊銷證書的情況) 假設(shè)需要被吊銷的證書文件為cert.pem,則執(zhí)行以下命令吊銷證書: openssl ca -revoke cert.pem -config "$HOME/testca/conf/testca.conf" 3. 生成證書吊銷列表文件(CRL) 準(zhǔn)備公開被吊銷的證書列表時(shí),,可以生成證書吊銷列表(CRL),,執(zhí)行命令如下: openssl ca -gencrl -out testca.crl -config "$HOME/testca/conf/testca.conf" 還可以添加-crldays和-crlhours參數(shù)來說明下一個(gè)吊銷列表將在多少天后(或多少小時(shí)候)發(fā)布,。 可以用以下命令檢查testca.crl的內(nèi)容: openssl crl -in testca.crl -text -noout 三. 自己生成公鑰密鑰,并用測(cè)試CA簽發(fā)數(shù)字證書 我們?cè)谄綍r(shí)測(cè)試時(shí),,可以自己用openssl為服務(wù)器或用戶生成公鑰密鑰,,并用上面創(chuàng)建的CA簽發(fā)對(duì)應(yīng)私鑰(密鑰)的數(shù)字證書。 假設(shè),,我們就用剛才創(chuàng)建CA的操作系統(tǒng)用戶為名為testuser的用戶創(chuàng)建數(shù)字證書,,我們要把待創(chuàng)建的私鑰、證書等都放在目錄$HOME/testuser下: 1. 創(chuàng)建密鑰和證書請(qǐng)求(證書請(qǐng)求里包含了公鑰) 創(chuàng)建$HOME/testuser目錄并執(zhí)行命令: mkdir $HOME/testuser cd $HOME/testuser openssl req -newkey rsa:1024 -keyout testkey.pem -keyform PEM -out testreq.pem -outform PEM -subj "/O=TestCom/OU=TestOU/CN=testuser" 執(zhí)行過程中需要輸入私鑰的保護(hù)密碼,,假設(shè)我們輸入密碼: 222222 執(zhí)行完后,,testkey.pem即為用戶的密鑰,而testreq.pem即為證書請(qǐng)求,。 可以用openssl req -in testreq.pem -text -noout查看證書請(qǐng)求的內(nèi)容,。 2. 用測(cè)試CA為testuser簽發(fā)證書 同樣還在$HOME/testuser目錄下執(zhí)行命令: openssl ca -in testreq.pem -out testcert.pem -config "$HOME/testca/conf/testca.conf" 執(zhí)行過程中需要輸入CA的密鑰保護(hù)密碼(剛才設(shè)置的888888),并且最后詢問你是否要給該用戶簽發(fā)證書時(shí)要選y,。 執(zhí)行完后,,testcert.pem即為證書, 可以用命令openssl x509 -in testcert.pem -text -noout查看證書內(nèi)容,。 3. 制作一個(gè)PKCS12格式的文檔(個(gè)人數(shù)字證書) 我們制作的這個(gè)PKCS#12文件將包含密鑰,、證書和頒發(fā)該證書的CA證書。該文件可以直接用于服務(wù)器數(shù)字證書或個(gè)人數(shù)字證書,。 把前幾步生成的密鑰和證書制作成一個(gè)pkcs12文件的方法執(zhí)行命令: openssl pkcs12 -export -in testcert.pem -inkey testkey.pem -out testuser.p12 -name testuser -chain -CAfile "$HOME/testca/cacert.pem" 執(zhí)行過程中需要輸入保護(hù)密鑰的密碼(222222),,以及新的保護(hù)pkcs12文件的密碼。 執(zhí)行完后,,testuser.p12即為pkcs12文件,。你可以直接拷貝到windows下,作為個(gè)人數(shù)字證書,,雙擊導(dǎo)入IE后就可以使用了,。該文件也可以直接用于tomcat作為服務(wù)器證書使用(我盡量在近期再寫一篇關(guān)于如何自己用tomcat建立HTTPS雙向認(rèn)證測(cè)試環(huán)境的文章),。 若要查看testuser.p12的內(nèi)容可以用命令openssl pkcs12 -in testuser.p12 說明: - 本文中名詞“個(gè)人數(shù)字證書”意識(shí)為包含私鑰和證書的實(shí)體,而不是單指只保護(hù)公鑰的數(shù)字證書,。 - openssl版本OpenSSL 0.9.8g 19 |
|