ubuntu生成密钥和证书_基于浏览器的密钥生成以及与浏览器的密钥/证书存储的交互...
ubuntu生成密鑰和證書
想象以下情況:
您需要從訪問您的網站的用戶那里獲取一個密鑰(在非對稱情況下為用戶的公共密鑰 ),并希望瀏覽器記住私有部分,而不會因冗長的導入過程而困擾用戶。 老實說,實際上,您甚至不希望用戶處理加密細節,這些細節是許多用戶無法知道或不正確知道的。 它應該簡單地工作,并且在最佳情況下,用戶甚至不應該注意到加密正在發揮作用!
例如,想象一下整個企業范圍內的證書頒發機構 ,其中員工可以申請證書或續訂登錄到公司Webmail系統所需的證書。 這不是員工的主要任務的一部分,因此該過程必須簡單,快速且無需閱讀任何內容。 非常感謝-或在本例中為Netscape -HTML發行了,因為HTML 5甚至是獨立于瀏覽器的,也是官方標準的一部分,帶有專用于密鑰生成的標簽: <KeyGen />。 簡而言之,該標記可以強制用戶的瀏覽器創建一個非對稱密鑰對,對相應的公共密鑰和服務器提供的質詢進行簽名,最后將其發送回服務器(更確切地說,發送至表單操作中定義的位置)屬性)。 私鑰會自動加密并存儲在瀏覽器的密鑰存儲區中。 用于公共密鑰,質詢和簽名封裝的格式稱為SPKAC 。 如果服務器以X.509證書作為響應,則證書直接鏈接到私鑰并存儲在瀏覽器的證書存儲區中。 結果,瀏覽器現在擁有服務器提供的(可能是新創建的)證書和相應的私鑰。 所有這些只需單擊一次提交按鈕即可。 (是的,也許用戶還應該在表單字段中添加一些詳細信息……)這是在Java中的操作方法。 為了簡單起見,我們將通過直接注冊為Servlet在服務器端使用快速且骯臟的解決方案。
首先,我們將從初始網站開始,該網站提供一個表格,在該表格中必須輸入證書申請者的一些詳細信息。 請注意,這些表單域不是由簽名與新生成私鑰保護! 該簽名僅保護公共密鑰,而在這種情況下(為簡單起見)該挑戰是硬編碼的,但必須是服務器在現實世界中選擇的新值。 因此,必須保護兩者:網站的交付,包括表單(它包含安全性關鍵值,挑戰,表單操作,……必須受到完整性保護)以及將數據傳輸回服務器。 再一次, 如果您無法保護通信并至少確保安全目標的完整性,那么攻擊者可能會破壞您的整個安全概念!
<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>在服務器端,必須為表單操作目標注冊一個處理類。 這是在您的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>這將導致對路徑/ CreateCertificate的任何調用都由CreateCertificate類處理。 反過來,CreateCertificate類執行名稱中所期望的操作:它創建一個證書,其中包括收到的公共密鑰和請求者的詳細信息。 公鑰和質詢包含在SPKAC結構中,該結構由KeyGen標記創建(在本例中,該名稱由名稱newSPKAC標識)。
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);} }在這種情況下,用于響應的ContentType是application / x-x509-user-cert。
就這樣。 用戶輸入詳細信息并單擊按鈕后,他應該在瀏覽器的證書存儲中找到新證書:
關于SPKAC 輕巧拆卸的最后一句話: BouncyCastle可以幫助您抵抗ASN.1和DER野獸!
翻譯自: https://www.javacodegeeks.com/2013/06/browser-based-key-generation-and-interaction-with-the-browsers-keycertificate-store.html
ubuntu生成密鑰和證書
總結
以上是生活随笔為你收集整理的ubuntu生成密钥和证书_基于浏览器的密钥生成以及与浏览器的密钥/证书存储的交互...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在Grails战争中添加“精简” Gro
- 下一篇: Linux的(linux的bind)