tft每日頭條

 > 科技

 > pythonhttps雙向認證

pythonhttps雙向認證

科技 更新时间:2024-12-25 06:09:38
背景

1、使用jdk自帶Keytool tomcat項目http轉單向https

2、使用Keytool生成雙向https證書提供請求工具類

3、安裝生成的雙向https證書詳細步驟少走彎路

pythonhttps雙向認證(使用Python寫一個可視化生成https證書的小工具)1

上面的三個文章值之前分享的生成單向和雙向https證書已經證書安裝的詳細步驟。

但是生成的步驟比較繁瑣,每次要手動收入很多命令,一不小心錯了還有從來。

工作中項目安裝的地點也比較多每次的IP地址也不一樣,所以想着做一個一勞永逸的小工具。

環境準備
  1. 電腦中已經安裝jdk并配置好環境變量
  2. 電腦中安裝Python3
  3. 安裝Python中的一個模塊eel

關于Python的學習有興趣的可以看之前分享的彙總文章(傳送門)。

pythonhttps雙向認證(使用Python寫一個可視化生成https證書的小工具)2

部分源碼展示

開發中主要用到的技術 Python3 eel html 。下面展示的是後端源碼有詳細的注釋,全部的源碼和完整的一個https.exe的軟件私:https下載。如果自己不想了解這些可以直接使用裡面我做好的小工具。已經打好exe的可執行軟件,詳細的打包方法完整源碼中都已提供。

#!/usr/bin/python3 # -*- encoding: utf-8 -*- __author__ = 'select957' __wei_xin_gong_zhong_hao__ = '快樂學習與分享' import os import eel import time import subprocess key_path = 'C:\key' # 檢查目錄 def check_dir_path(): file_names = ('clientcert.cer', 'clientcert.p12', 'server.cer', 'server.keystore') exists = os.path.exists(key_path) if exists: for file in os.listdir(key_path): if file in file_names: os.remove(key_path '\\' file) else: os.mkdir(key_path) # 生成證書 def create_key(expiration_date, ip_or_ym, cn, pwd): check_dir_path() # 1、生成服務器證書庫 a = 'keytool -validity {expiration_date} -genkey -v -alias servercert -keyalg RSA -ext SAN={ip_or_ym} -keystore ' \ '{key_path}\server.keystore -dname CN={cn},OU=server,O=server,L=server,ST=server,c=CN -storepass {pwd} ' \ '-keypass {pwd} '.format(expiration_date=expiration_date, key_path=key_path, ip_or_ym=ip_or_ym, cn=cn, pwd=pwd) # os.system(a) subprocess.run(a, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) time.sleep(0.1) # 2、生成客戶端證書庫 b = 'keytool -validity {expiration_date} -genkeypair -v -alias clientcert -keyalg RSA -storetype PKCS12 -keystore ' \ '{key_path}\clientcert.p12 -dname "CN=client,OU=client,O=client,L=client,ST=client,c=CN" -storepass {pwd} ' \ '-keypass {pwd} '.format(expiration_date=expiration_date, key_path=key_path, pwd=pwd) # os.system(b) subprocess.run(b, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) time.sleep(0.1) # 3、從客戶端證書庫中導出客戶端證書 c = 'keytool -export -v -alias clientcert -keystore {key_path}\clientcert.p12 -storetype PKCS12 -storepass {pwd} ' \ '-rfc -file {key_path}\clientcert.cer '.format(key_path=key_path, pwd=pwd) # os.system(c) subprocess.run(c, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) time.sleep(0.1) # 4、将客戶端證書導入到服務器證書庫(使得服務器信任客戶端證書) d = 'keytool -import -v -alias clientcert -file {key_path}\clientcert.cer -keystore {key_path}\server.keystore ' \ '-storepass {pwd} -noprompt '.format(key_path=key_path, pwd=pwd) # os.system(d) subprocess.run(d, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) time.sleep(0.1) # 5、導出讓客戶端信任的服務器證書 e = 'keytool -keystore {key_path}\server.keystore -export -alias servercert -file {key_path}\server.cer ' \ '-storepass {pwd} '.format(key_path=key_path, pwd=pwd) # os.system(e) subprocess.run(e, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) eel.init('web') @eel.expose def py_submit(data): print(data) cn = data['cn'] pwd = data['pwd'] ip_or_ym = data['ip_or_ym'] expiration_date = data['expiration_date'] create_key(expiration_date, ip_or_ym, cn, pwd) return {'code': 0, 'msg': '證書生成成功請去 C:\key 目錄下獲取。'} # 啟動的函數調用放在最後,port=0表示使用随機端口,size=(寬,高) eel.start('https.html', port=0, size=(560, 400))

pythonhttps雙向認證(使用Python寫一個可視化生成https證書的小工具)3

效果演示

1、拿到軟件後直接雙擊運行即可

pythonhttps雙向認證(使用Python寫一個可視化生成https證書的小工具)4

2、根據你的業務需求,可以選擇使用ip生成也可以選擇域名生成

pythonhttps雙向認證(使用Python寫一個可視化生成https證書的小工具)5

3、這裡證書密碼是服務端證書和客戶端證書密碼設置一樣了

pythonhttps雙向認證(使用Python寫一個可視化生成https證書的小工具)6

4、證書生成完成會提示去相應的目錄獲取

pythonhttps雙向認證(使用Python寫一個可視化生成https證書的小工具)7

5、代碼裡默認将證書生成在C:\key目錄下

pythonhttps雙向認證(使用Python寫一個可視化生成https證書的小工具)8

相信聰明的你已經看懂了吧,非常簡單。

證書安裝和測試

下面是證書的安裝制作了一個動圖。

pythonhttps雙向認證(使用Python寫一個可視化生成https證書的小工具)9

服務端證書的配置

pythonhttps雙向認證(使用Python寫一個可視化生成https證書的小工具)10

啟動服務測試

pythonhttps雙向認證(使用Python寫一個可視化生成https證書的小工具)11

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved