1、使用jdk自帶Keytool tomcat項目http轉單向https
2、使用Keytool生成雙向https證書提供請求工具類
3、安裝生成的雙向https證書詳細步驟少走彎路
上面的三個文章值之前分享的生成單向和雙向https證書已經證書安裝的詳細步驟。
但是生成的步驟比較繁瑣,每次要手動收入很多命令,一不小心錯了還有從來。
工作中項目安裝的地點也比較多每次的IP地址也不一樣,所以想着做一個一勞永逸的小工具。
環境準備關于Python的學習有興趣的可以看之前分享的彙總文章(傳送門)。
部分源碼展示
開發中主要用到的技術 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))
效果演示
1、拿到軟件後直接雙擊運行即可
2、根據你的業務需求,可以選擇使用ip生成也可以選擇域名生成
3、這裡證書密碼是服務端證書和客戶端證書密碼設置一樣了
4、證書生成完成會提示去相應的目錄獲取
5、代碼裡默認将證書生成在C:\key目錄下
相信聰明的你已經看懂了吧,非常簡單。
證書安裝和測試下面是證書的安裝制作了一個動圖。
服務端證書的配置
啟動服務測試
,
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!