日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

ubuntu生成密钥和证书_基于浏览器的密钥生成以及与浏览器的密钥/证书存储的交互...

發(fā)布時(shí)間:2023/12/3 HTML 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ubuntu生成密钥和证书_基于浏览器的密钥生成以及与浏览器的密钥/证书存储的交互... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

ubuntu生成密鑰和證書

想象以下情況:
您需要從訪問您的網(wǎng)站的用戶那里獲取一個(gè)密鑰(在非對(duì)稱情況下為用戶的公共密鑰 ),并希望瀏覽器記住私有部分,而不會(huì)因冗長的導(dǎo)入過程而困擾用戶。 老實(shí)說,實(shí)際上,您甚至不希望用戶處理加密細(xì)節(jié),這些細(xì)節(jié)是許多用戶無法知道或不正確知道的。 它應(yīng)該簡(jiǎn)單地工作,并且在最佳情況下,用戶甚至不應(yīng)該注意到加密正在發(fā)揮作用!
例如,想象一下整個(gè)企業(yè)范圍內(nèi)的證書頒發(fā)機(jī)構(gòu) ,其中員工可以申請(qǐng)證書或續(xù)訂登錄到公司W(wǎng)ebmail系統(tǒng)所需的證書。 這不是員工的主要任務(wù)的一部分,因此該過程必須簡(jiǎn)單,快速且無需閱讀任何內(nèi)容。 非常感謝-或在本例中為Netscape -HTML發(fā)行了,因?yàn)镠TML 5甚至是獨(dú)立于瀏覽器的,也是官方標(biāo)準(zhǔn)的一部分,帶有專用于密鑰生成的標(biāo)簽: <KeyGen />。 簡(jiǎn)而言之,該標(biāo)記可以強(qiáng)制用戶的瀏覽器創(chuàng)建一個(gè)非對(duì)稱密鑰對(duì),對(duì)相應(yīng)的公共密鑰和服務(wù)器提供的質(zhì)詢進(jìn)行簽名,最后將其發(fā)送回服務(wù)器(更確切地說,發(fā)送至表單操作中定義的位置)屬性)。 私鑰會(huì)自動(dòng)加密并存儲(chǔ)在瀏覽器的密鑰存儲(chǔ)區(qū)中。 用于公共密鑰,質(zhì)詢和簽名封裝的格式稱為SPKAC 。 如果服務(wù)器以X.509證書作為響應(yīng),則證書直接鏈接到私鑰并存儲(chǔ)在瀏覽器的證書存儲(chǔ)區(qū)中。 結(jié)果,瀏覽器現(xiàn)在擁有服務(wù)器提供的(可能是新創(chuàng)建的)證書和相應(yīng)的私鑰。 所有這些只需單擊一次提交按鈕即可。 (是的,也許用戶還應(yīng)該在表單字段中添加一些詳細(xì)信息……)這是在Java中的操作方法。 為了簡(jiǎn)單起見,我們將通過直接注冊(cè)為Servlet在服務(wù)器端使用快速且骯臟的解決方案。

首先,我們將從初始網(wǎng)站開始,該網(wǎng)站提供一個(gè)表格,在該表格中必須輸入證書申請(qǐng)者的一些詳細(xì)信息。 請(qǐng)注意,這些表單域不是由簽名與新生成私鑰保護(hù)! 該簽名僅保護(hù)公共密鑰,而在這種情況下(為簡(jiǎn)單起見)該挑戰(zhàn)是硬編碼的,但必須是服務(wù)器在現(xiàn)實(shí)世界中選擇的新值。 因此,必須保護(hù)兩者:網(wǎng)站的交付,包括表單(它包含安全性關(guān)鍵值,挑戰(zhàn),表單操作,……必須受到完整性保護(hù))以及將數(shù)據(jù)傳輸回服務(wù)器。 再一次, 如果您無法保護(hù)通信并至少確保安全目標(biāo)的完整性,那么攻擊者可能會(huì)破壞您的整個(gè)安全概念!

<form action="CreateCertificate" method="POST"> <table><tbody><tr><td>Country name</td><td>C</td><td><input name="c" type="text" value="" /></td></tr><tr><td>Common name</td><td>CN</td><td><input name="cn" type="text" value="" /></td></tr><tr><td>Organizational unit</td><td>OU</td> <td><input name="ou" type="text" value="" /></td></tr><tr><td>Organization</td><td>O</td><td><input name="o" type="text" value="" /></td></tr><tr><td></td><td><keygen challenge="replaceMe" keyparams="2048" keytype="rsa" name="newSPKAC"></keygen></td><td><input type="submit" value="Generate!" /></td></tr></tbody> </table> </form>

在服務(wù)器端,必須為表單操作目標(biāo)注冊(cè)一個(gè)處理類。 這是在您的web.xml配置文件中完成的。

<web-app version="3.0" xmlns:xsi="..." xmlns="..." xsi:schemalocation="..."><servlet><servlet-name>CreateCertificate</servlet-name><servlet-class>com.blogspot.armoredbarista.examples.certificates.CreateCertificate</servlet-class></servlet><servlet-mapping><servlet-name>CreateCertificate</servlet-name><url-pattern>/CreateCertificate</url-pattern></servlet-mapping><session-config><session-timeout>30</session-timeout></session-config> </web-app>

這將導(dǎo)致對(duì)路徑/ CreateCertificate的任何調(diào)用都由CreateCertificate類處理。 反過來,CreateCertificate類執(zhí)行名稱中所期望的操作:它創(chuàng)建一個(gè)證書,其中包括收到的公共密鑰和請(qǐng)求者的詳細(xì)信息。 公鑰和質(zhì)詢包含在SPKAC結(jié)構(gòu)中,該結(jié)構(gòu)由KeyGen標(biāo)記創(chuàng)建(在本例中,該名稱由名稱newSPKAC標(biāo)識(shí))。

public class CreateCertificate extends HttpServlet {/*** Processes requests for both HTTP GET and POST methods.** @param request servlet request* @param response servlet response* @throws ServletException if a servlet-specific error occurs* @throws IOException if an I/O error occurs*/protected void processRequest(final HttpServletRequest request,final HttpServletResponse response)throws ServletException, IOException {OutputStream out = response.getOutputStream();byte[] content = "An error occured".getBytes("UTF-8");try {String c = request.getParameter("c");String cn = request.getParameter("cn");String o = request.getParameter("o");String ou = request.getParameter("ou");String newSPKAC = request.getParameter("newSPKAC");X509Certificate cert = createCertificate(c, cn, ou, o, newSPKAC);content = cert.getEncoded();response.setContentType("application/x-x509-user-cert");response.setHeader("Pragma", "No-Cache");response.setDateHeader("EXPIRES", -1);} catch (...) {// error processing} finally {out.write(content);out.flush();out.close();}}/*** Handles the HTTP* GET method.** @param request servlet request* @param response servlet response* @throws ServletException if a servlet-specific error occurs* @throws IOException if an I/O error occurs*/@Overrideprotected void doGet(final HttpServletRequest request,final HttpServletResponse response)throws ServletException, IOException {processRequest(request, response);}/*** Handles the HTTP* POST method.** @param request servlet request* @param response servlet response* @throws ServletException if a servlet-specific error occurs* @throws IOException if an I/O error occurs*/@Overrideprotected void doPost(final HttpServletRequest request,final HttpServletResponse response)throws ServletException, IOException {processRequest(request, response);} }

在這種情況下,用于響應(yīng)的ContentType是application / x-x509-user-cert。

就這樣。 用戶輸入詳細(xì)信息并單擊按鈕后,他應(yīng)該在瀏覽器的證書存儲(chǔ)中找到新證書:

關(guān)于SPKAC 輕巧拆卸的最后一句話: BouncyCastle可以幫助您抵抗ASN.1和DER野獸!

參考: Java安全和相關(guān)主題博客中的JCG合作伙伴 Christopher Meyer, 基于瀏覽器的密鑰生成以及與瀏覽器的密鑰/證書存儲(chǔ)的交互 。

翻譯自: https://www.javacodegeeks.com/2013/06/browser-based-key-generation-and-interaction-with-the-browsers-keycertificate-store.html

ubuntu生成密鑰和證書

總結(jié)

以上是生活随笔為你收集整理的ubuntu生成密钥和证书_基于浏览器的密钥生成以及与浏览器的密钥/证书存储的交互...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。