我正在努力寻找一种使用python在网页上选择证书的方法。我试过这些例子,但仍然不起作用。有人能帮我吗?
从硒进口网络驱动程序
从selenium.webdriver.common.keys导入密钥
navegador=网络驱动程序。Chrome(“C:\ProgramFiles\Google\Chrome\Application\chromedriver.exe”)
navegador.get(“https://cav.receita.fazenda.gov.br/ecac/”)
navegador.find_element_by_id(“登录-dados-certificado”).click()
navegador.find_element_by_id(“证书数字”).单击()
如果您想尝试使用注册表编辑器和ChromeDriver,请尝试:
1-)按Windwos R并键入“regedit”。
2)右键点击“计算机\本地机\软件\策略”,选择新建-
3-) 严格单击自动选择证书网址, 新 -
4-)Rigth单击“1”,修改然后复制并粘贴此JSON“{”模式“:”https://urlFromTheSiteYouWantAccess“,”过滤器“:{”颁发者“:{”CN“:”您的 cn“}”,“主题”:{“CN”:“您的证书 cn”}}}“。
如果你只想用一个证书访问E-CAC,你可以手动编辑上面的Json,按钮发送证书的url,以及chrome为你选择的证书的颁发者和主题信息。
但是如果你想使用多个证书,你可以使用这个python代码来打开一个证书,获取关于颁发者和主题的信息,并在注册表AutoSelectCertificateForUrls中修改字符串Value "1 "中的Json。
进口。
from os import times
import winreg
from OpenSSL import crypto
from selenium import webdriver
打开证书的方法:
def GetCertificate(pathOfCertificate, passwordOfCertifcate):
pkcs12 = crypto.load_pkcs12(open(pathOfCertificate, 'rb').read(), passwordOfCertifcate)
return pkcs12.get_certificate()
更新注册表项“AutoSelectCertificateForUrls”的StringValue中的Json的方法:
def UpdateStringValue(strigValueName,newValueOfStrinValue, stringValuePath):
key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, stringValuePath, 0, winreg.KEY_ALL_ACCESS)
winreg.SetValueEx(key, strigValueName, 0, winreg.REG_SZ, newValueOfStrinValue)
winreg.CloseKey(key)
我在main中为path声明了两个变量,其中是字符串值和字符串值的名称。在我的例子中是“1”:
pathOfstringValue = 'SOFTWARE\Policies\Google\Chrome\AutoSelectCertificateForUrls'
stringValueName = '1'
获取证书以及发行人和主体的信息:
certificate = GetCertificate("C:\yourCrtificatePath\\Certificate.pfx", 'certificatePassword')
subject = certificate.get_subject()
issuer = certificate.get_issuer()
第一个URL是证书将被发送到的地方,另一个是我们有使用证书登录的按钮的页面:
url_where_certificate_will_be_send = "https://notacarioca.rio.gov.br/"
url = 'https://notacarioca.rio.gov.br/senhaweb/login.aspx'
构建json,(很抱歉用这种难看的方式处理字符串)并调用方法来编辑字符串值注册表:
json = '{"pattern":"' + url_where_certificate_will_be_send + '","filter":{"ISSUER":{"CN":"' + issuer.CN + '","C":"' + issuer.C + '","O":"' + issuer.O + '"},"SUBJECT":{"CN":"' + subject.CN + '","C":"' + subject.C + '","O":"' + subject.O + '"}}}'
UpdateStringValue(stringValueName, json, pathOfstringValue)
最后是点击证书登录按钮的代码:
driver = webdriver.Chrome()
driver.get(url)
btn_certificate_login = driver.find_element_by_id('ctl00_cphCabMenu_imgLoginICP')
btn_certificate_login.click()
times.sleep(2.4)
driver.quit()
要下载代码,请访问我的github 请点击此处
我想写一些可以枚举和使用(签名)证书在货币用户/我和LocalMachine/我,但我还没有能够找到任何Windows证书存储,只有Java自己的秘密存储。这个链接看起来很有希望,但我只能使用Java。 我以前在SO上发现过这个问题,但这是五年前的问题,在计算机时代是很长的时间了。谢谢!
我们正在尝试使用OAuth2.0在我们的应用程序中登录Outlook.com,我们已经完成了应用程序AAD的注册。应用程序成功地验证了用户,并用access_token响应,现在进一步我们想从imap服务器读取电子邮件,这里我们得到了失败,请尝试和帮助我们解决这个问题。 确定Microsoft Exchange IMAP4服务已就绪。[uaboadiauabsadaamqbdaeeamaawady
我在Java中有一个Azure函数。使用托管身份和密钥库引用,我在功能应用程序中添加了一个配置来访问密钥库秘密和证书。这个秘密被正确引用,我可以在Azure函数中访问它的值。
我正在使用SCEP为我的WebService创建证书。在成功创建证书和启动服务器之后,我尝试通过浏览器访问wsdl,浏览器显示一条错误消息,该消息表示该应用程序不允许使用证书类型,错误代码:SEC_ERROR_INSAPPLAYATE_CER_TYPE。一位同事指出,我必须将扩展密钥属性中的密钥用法更改为“服务器身份验证”,并且应该在认证请求中这样做。 要创建一个新请求,我使用BouncyCast
<?php $http = HttpRequest::newSession(); $response = $http->sslCert('证书路径', 'pem') // 支持PEM、DER和ENG证书 ->get('https://www.baidu.com/'); $content = $response->body(); // 网页源码
如何生成新证书并将其添加到VS?我对Gitlab没有任何经验。