<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-9  評(píng)論-168  文章-266  trackbacks-0

    X.509完結(jié)

    參考文檔:  終極武器—數(shù)字證書 http://book.51cto.com/art/201004/192437.htm

             用SSL進(jìn)行雙向身份驗(yàn)證意思就是在客戶機(jī)連接服務(wù)器時(shí),鏈接雙方都要對(duì)彼此的數(shù)字證書進(jìn)行驗(yàn)證,保證這
    是經(jīng)過授權(quán)的才能夠連接(我們鏈接一般的SSL時(shí)采用的是單向驗(yàn)證,客戶機(jī)只驗(yàn)證服務(wù)器的證書,服務(wù)器不驗(yàn)證客戶
    機(jī)的證書。而連接網(wǎng)上銀行時(shí)使用的U盾就是用來存儲(chǔ)進(jìn)行雙向驗(yàn)證所需要的客戶端證書的)。

    注: 證書更改操作(導(dǎo)入,刪除等),都必需重啟WEB應(yīng)用.否則證書庫(kù)的緩存無法清除.一般客戶端的證書不需吊銷,也沒意義,直接讓其無法登陸就行.
    spring security3 的X.509配置在雙向認(rèn)證中,可直接登錄,即網(wǎng)銀中使用U盾就可以不用輸入用戶名和密碼直接登錄系統(tǒng).
    <http>
        <intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" requires-channel="https"/>
        <intercept-url pattern="/**" access="ROLE_USER"  requires-channel="https"/>
        <x509 subject-principal-regex="CN=(.*?)," user-service-ref="userService"/>
    </http>

    <user-service id="userService">
        <user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN" />
        <user name="user" password="user" authorities="ROLE_USER" />
    </user-service>

     

    獲得安全證書有兩種方式:
    (1)一種方式是到權(quán)威機(jī)構(gòu)CA購(gòu)買
    要獲得數(shù)字證書,我們需要使用數(shù)字證書管理工具(如KeyTool和OpenSSL)構(gòu)建CSR(Certificate Signing Request,數(shù)字證書簽發(fā)申請(qǐng)),交由CA機(jī)構(gòu)簽發(fā),

    形成最終的數(shù)字證書。
    (2)還有一種方式是創(chuàng)建自我簽名的證書

    keystore:keystore擴(kuò)展名的文件(即JKS類型)中一般保存的是我們的私鑰,用來加解密或者為別人做簽名
    truestore:保存的是一些可信任的證書,主要是訪問某個(gè)https的時(shí)候?qū)υL問者進(jìn)行認(rèn)證,以確保其可信任。
    truststore:雙向認(rèn)證中是必須的,如果沒有顯式的指定,默認(rèn)指定為$JAVA_HOME/lib/security/cacerts 這個(gè)文件。
    雙向SSL認(rèn)證,服務(wù)器必須要信任客戶端證書,因此,必須把客戶端證書添加為服務(wù)器的信任認(rèn)證中心,即$JAVA_HOME/lib/security/cacerts 這個(gè)文件
    1)KeyStore: 其中保存服務(wù)端的私鑰
    2)Trust KeyStore:其中保存客戶端的授權(quán)證書

     

    一.Keytool是一個(gè)Java數(shù)據(jù)證書的管理工具。
    1.keystore 文件
    Keytool是一個(gè)證書庫(kù)文件,可將N個(gè)密鑰(key)和證書(certificates)存在一個(gè)稱為keystore的文件中,也即N個(gè)條目的意思.
     在keystore里,包含兩種對(duì)應(yīng)的數(shù)據(jù):
    (1)密鑰實(shí)體(Key entity): 密鑰(secret key)又或者是私鑰和配對(duì)公鑰(采用非對(duì)稱加密)
    (2)可信任的證書實(shí)體(trusted certificate entries): 也可稱為公鑰.

    2.參數(shù)說明
    參數(shù)說明:
    -genkey  創(chuàng)建證書庫(kù).
    -import      將已簽名數(shù)字證書導(dǎo)入密鑰庫(kù)  keytool -import -alias sage -keystore sagely -file sagely.crt
                 導(dǎo)入已簽名數(shù)字證書用keytool -list -v 以后可以明顯發(fā)現(xiàn)多了認(rèn)證鏈長(zhǎng)度,并且把整個(gè)CA鏈全部打印出來。
    -delete 刪除指定別名的條目(密鑰及證書)
    -trustcacerts 表示將數(shù)字證書導(dǎo)入信任庫(kù)。
    -alias 密鑰別名(任意不重復(fù)).證書實(shí)體關(guān)聯(lián)著密鑰實(shí)體,可通過別名刪除整個(gè)條目(證書).
    -dname 表示密鑰的Distinguished Names,
            CN=commonName  即對(duì)于服端證書時(shí)為網(wǎng)站域名,客戶端則任意.通常使用域名或帶有通配符“*”的泛域名,如“*.zlex.org”標(biāo)識(shí)用戶身份。
            OU=organizationUnit
            O=organizationName
            L=localityName
            S=stateName
            C=country
    Distinguished Names表明了密鑰的發(fā)行者身份
    -keyalg   指定密鑰的加密算法,支持RSA(通常)和DSA共2種算法,默認(rèn)算法為DSA。
    -keypass 密鑰的密碼

    -keystore 指定keystore文件及路徑(產(chǎn)生的信息存在.keystore文件中)
    如果不設(shè)置,則默認(rèn)在操作系統(tǒng)的當(dāng)前用戶(如ALGZ)目錄下生成名為“.keystore”的文件,還會(huì)產(chǎn)生一個(gè)mykey的密鑰別名,mykey中包含用戶的公鑰、私鑰和證書。
    在Wnidows下,文件的位置為:C:\Documents and Settings\ALGZ\.keystore
    在Linux下,該文件的位置為:home\ALGZ\.keystore

    -storepass 訪問keystore(密鑰庫(kù))的密碼,這個(gè)密碼提供系統(tǒng)從mykeystore文件中將信息取出
    -validity 該密鑰的有效期,以天為單位

    -keysize     指定密鑰長(zhǎng)度,以位為單位.
    -file        參數(shù)指定導(dǎo)出證書的文件名.
    -sigalg 指定數(shù)字簽名算法,這里指定為SHA1withRSA算法,通常不用設(shè)置。
    -rfc 指定以Base64編碼格式輸出,通常不設(shè)置。


    3.使用步驟:
    (1)生成證書庫(kù)
    生成密鑰,并以證書庫(kù)文件方式保存
     keytool -genkey -alias bogus -keysize 512 -validity 3650 -keyalg RSA -dname "CN=bogus.com, OU=XXX CA, O=Bogus Inc, L=Stockholm, S=Stockholm,

    C=SE" -keypass boguspw -storepass boguspw -keystore sean.cert

    2.導(dǎo)出證書
    從證書庫(kù)中(-keystore)將指定別名的證書導(dǎo)出為證書文件(-file)
    例如:keytool -export -keystore monitor.keystore -alias monitor -file monitor.cer
    將把證書庫(kù) monitor.keystore 中的別名為 monitor 的證書導(dǎo)出到 monitor.cer 證書文件中.它包含證書主體的信息及證書的公鑰,不包括私鑰,可以公開。
    keytool -export -keystore d2aApplet.keystore -alias RapaServer -file Rapa.cert -storetype IAIKKeystore

    3.導(dǎo)入證書
    將指定別名的證書(-file)中導(dǎo)入到keystore證書庫(kù)(-keystore)中
    這里向Java默認(rèn)的證書 cacerts導(dǎo)入Rapa.cert
    keytool -import -alias RapaServer -keystore cacerts -file Rapa.cert
    通常該命令用以導(dǎo)入來自CA中心的證書(Importing a Certificate for the CA)

    4.刪除證書庫(kù)中的條目(即密鑰實(shí)體與證書實(shí)體)
    keytool -delete -alias RapaServer -keystore d2aApplet.keystore ,這條命令將 d2aApplet.keystore 中的 RapaServer 這一條證書刪除了。

    5.證書條目口令的修改
    使用 -keypasswd 參數(shù),如:keytool -keypasswd -alias RapaServer -keystore d2aApplet.keystore,可以以交互的方式修改 d2aApplet.keystore證書庫(kù)中的條目

    為 RapaServer 的證書。
    Keytool -keypasswd -alias RapaServer -keypass 654321 -new 123456 -storepass 888888 -keystore d2aApplet.keystore這一行命令以非交互式的方式修改庫(kù)

    中別名為 RapaServer 的證書的密碼為新密碼 654321,行中的 123456 是指該條證書的原密碼, 888888 是指證書庫(kù)的密碼。

    6. 導(dǎo)出證書到新的TrustStore(信任的證書庫(kù))
     keytool -import -alias 別名 -file 文件名 -keystore truststore

    7.    查看Keystore文件內(nèi)容
    進(jìn)入JDK安裝目錄下的bin目錄,運(yùn)行keytool命令。
    keytool -list -keystore C:\keystore.jks -storepass password

     -v              顯示密鑰庫(kù)中的證書詳細(xì)信息

    ***********************************************

    cacerts證書文件(The cacerts Certificates File)
    證書文件存在于java.home\lib\security目錄下,是Java系統(tǒng)的CA證書倉(cāng)庫(kù)

    CA證書的導(dǎo)入(Importing Certificates)
    命令:
    引用
    keytool -import -alias joe -file jcertfile.cer

    這個(gè)命令將證書文件jcertfile.cer中別名為joe的證書導(dǎo)入系統(tǒng)的受信任證書列表中
    通常該命令用以導(dǎo)入來自CA中心的證書(Importing a Certificate for the CA)

    導(dǎo)入被CA中心授權(quán)的證書(Importing the Certificate Reply from the CA)
    命令:
    引用
    keytool -import -trustcacerts -file VSMarkJ.cer

     

    證書的導(dǎo)出(Exporting Certificates)
    命令:
    引用
    keytool -export -alias jane -file janecertfile.cer

    這個(gè)命令將別名為jane的證書導(dǎo)出到證書文件jcertfile.cer中
    生成的證書可以交付客戶端用戶使用,用以進(jìn)行SSL通訊,或者伴隨電子簽名的jar包進(jìn)行發(fā)布者的身份認(rèn)證。


    *************************************


    網(wǎng)上有許多教程,但沒有說明443與8443,http與https的區(qū)別,讓人試來試去總有不爽的地方。沒有說明怎樣測(cè)試,呵呵,我說明一下:


    Tomcat6配置HTTPS

    我使用的JDK版本為JDK6,使用的的Tomcat版本為6;配置Tomcat下的HTTPS其實(shí)很簡(jiǎn)單,只需要完成兩步工作就可以 了;SSL認(rèn)證分雙向認(rèn)證和單向認(rèn)證,如

    果為雙向認(rèn)證則客戶端也需要安裝已生成好的文件。


    我把生成的“服務(wù)器證書文件”取名為server.jks。簡(jiǎn)單起見,我把server.jks放在D盤根目錄下面,配置環(huán)境為windows.
    首先使用JDK自帶的工具keytool生成一個(gè)“服務(wù)器證書”,取名為server.jks。

    一.tomcat6配置雙向認(rèn)證

    1、生成服務(wù)器端證書
    x:\>keytool -genkey -keyalg RSA -dname "cn=localhost,ou=sango,o=none,l=china,st=beijing,c=cn"
    -alias server -keypass password -keystore d:\server.jks -storepass password -validity 3650
    服務(wù)端的CN值必須為域名,不然客戶端認(rèn)證時(shí)為非法.

    2、生成客戶端證書
    X:\>keytool -genkey -keyalg RSA -dname “cn=sango,ou=sango,o=none,l=china,st=beijing,c=cn”
    -alias custom -storetype PKCS12 -keypass password -keystore d:\custom.p12
    -storepass password -validity 3650  
    客戶端的CN可以是任意值。

    3、由于是雙向SSL認(rèn)證,服務(wù)器必須要信任客戶端證書,因此,必須把客戶端證書添加為服務(wù)器的信任認(rèn)證。由于不能直接將PKCS12格式的證書庫(kù)導(dǎo)入,我們

    (1)必須先把客戶端證書導(dǎo)出為一個(gè)單獨(dú)的CER文件,使用如下命令,先把客戶端證書導(dǎo)出為一個(gè)單獨(dú)的cer文件:
    X:\>keytool -export -alias custom -file d:\custom.cer -keystore  d:\custom.p12 -storepass password -storetype PKCS12 -rfc  
    (2)然后,添加客戶端證書到服務(wù)器中(將已簽名數(shù)字證書導(dǎo)入密鑰庫(kù))
    X:\>keytool -import -v -alias custom -file d:\custom.cer -keystore  d:\server.jks -storepass password  

    4、查看證書詳細(xì)(-v)內(nèi)容
    keytool -list -v -keystore d:\server.jks -storepass password  

    5、配置tomcat service.xml文件
    <Connector port=“8443″ protocol=“HTTP/1.1″ SSLEnabled=“true”  maxThreads=“150″ scheme=“https” secure=“true” 
    clientAuth=“true” sslProtocol=“TLS” 
    keystoreFile="D:/server.jks" keystorePass="password"
    truststoreFile="D:/server.jks" truststorePass="password"  /> 

    不設(shè)置truststoreFile,truststorePass屬性,即默認(rèn)指向"%JAVA_HOME%/JRE/LIB/SECURITY/CACERTS"文件(JKS類型),則在雙向認(rèn)證中,需把客戶端認(rèn)證導(dǎo)入到此

    文件中.
    clientAuth=”true”表示雙向認(rèn)證

    6、導(dǎo)入客戶端證書到瀏覽器
    雙向認(rèn)證需要強(qiáng)制驗(yàn)證客戶端證書。雙擊“custom.p12”即可將證書導(dǎo)入至IE

    二.tomcat6配置單向認(rèn)證

    1、生成服務(wù)器端證書
    X:\>keytool -genkey -keyalg RSA -dname “cn=localhost,ou=sango,o=none,l=china,st=beijing,c=cn”
    -alias server -keypass password -keystore d:\server.jks -storepass password -validity 3650  

    2、由于是單向認(rèn)證,沒有必要生成客戶端的證書,直接進(jìn)入配置tomcat service.xml文件,Xml代碼
    <Connector port=”8443″ protocol=”HTTP/1.1″ SSLEnabled=”true”
    maxThreads=”150″ scheme=”https” secure=”true”
    clientAuth=”false” sslProtocol=”TLS”
    keystoreFile=”D:/server.jks” keystorePass=”password”/>

    clientAuth=”false”表示單向認(rèn)證,同時(shí)去掉服務(wù)端的可信任認(rèn)證,即:truststoreFile=”D:/server.jks” truststorePass=”password”這2個(gè)屬性 .

    測(cè)試說明:

    1.請(qǐng)注意本機(jī)測(cè)試的網(wǎng)址是:https://localhost:8443

    2.如果將tomcat的 server.xml 的8443 更改為 443,注意本機(jī)的443是否開啟。

    3.如果你的tomcat 使用了http://localhost:8080,測(cè)試網(wǎng)址也是https://localhost:8443

    其它:當(dāng)使用https訪問某一域名時(shí),瀏覽器默認(rèn)訪問服務(wù)器的443端口。內(nèi)部處理后,再轉(zhuǎn)向80處理。所以ssl 全稱Security Socket Layer, 加密套接字協(xié)議層 名

    字沒有改錯(cuò),只是一個(gè)加密層

    posted on 2011-03-03 16:19 紫蝶∏飛揚(yáng)↗ 閱讀(4864) 評(píng)論(0)  編輯  收藏 所屬分類: Spring Security

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产免费一区二区三区在线观看| 性短视频在线观看免费不卡流畅| 亚洲AV永久无码区成人网站| 国产精品1024永久免费视频 | 思思久久99热免费精品6| 亚洲精品亚洲人成在线观看| 国产卡二卡三卡四卡免费网址| 视频一区在线免费观看| 1区1区3区4区产品亚洲| 日韩免费视频观看| 久久一区二区三区免费播放 | 亚洲女人初试黑人巨高清| 国产真人无遮挡作爱免费视频 | 无限动漫网在线观看免费| 亚洲黄片手机免费观看| 亚洲中文无码a∨在线观看| 亚洲精品久久久www| 久久成人国产精品免费软件| 一级做a免费视频观看网站| 麻豆狠色伊人亚洲综合网站| 亚洲人成网77777色在线播放| 女人被弄到高潮的免费视频| 少妇太爽了在线观看免费视频| 婷婷亚洲综合五月天小说在线| 亚洲韩国在线一卡二卡| 国内精品99亚洲免费高清| 国产精品成人无码免费| av无码久久久久不卡免费网站| 日韩精品无码免费专区午夜| 精品亚洲国产成人av| 亚洲中字慕日产2021| 亚洲第一成年男人的天堂| 亚洲日本中文字幕天堂网| 免费黄网在线观看| 国产一卡2卡3卡4卡2021免费观看| 永久免费A∨片在线观看| EEUSS影院WWW在线观看免费| 久久久久久久久无码精品亚洲日韩| 亚洲精品第五页中文字幕| 亚洲国产国产综合一区首页| 少妇性饥渴无码A区免费|