标签 身份验证 下的文章

网站部署SSL证书的重要作用如下:

  1.SSL证书可加密敏感信息使其不被泄露

  使用SSL证书的主要原因是为了保障通过Internet发送的敏感信息能够加密,防止重要数据不被泄露。这很重要,因为您在Internet上进行计算机与服务器之间的信息传递,如果未使用SSL证书加密,则您传递的任何信息都有可能被第三方获取,包括您的信用卡号,用户名和密码以及其他敏感信息。使用SSL证书后,可以保障所有人都无法读取信息,这可以保护信息数据免受黑客或者用心不良的人的侵害。

  2.SSL证书可提供身份验证,防止钓鱼网站

  除信息加密外,SSL证书可提供身份验证。这意味着您可以确保将信息发送到正确的服务器,不用担心别人窃取您的信息。有效的防止第三方伪装成您的网站并欺骗您的用户,获取用户个人信息,造成或大或小的损失。而SSL证书是由受信任的CA机构颁发的,申请证书时会严格的验证企业/组织的信息。所以说,选择受信任的CA机构颁发的SSL证书非常的重要,CA机构会通过各种信息的验证才会颁发SSL证书,而且EV SSL证书需要比其他证书更多的验证资料。

  3.SSL证书可增加信任度

  安装SSL证书的网站在Web浏览器的地址栏可显示,绿色小锁图标,绿色地址栏,EV SSL证书还能显示企业/组织名称。以确保访问者知道其连接是受到保护的,可放心使用。这意味着当访问者看到这些提示信息会更信任您的网站。而且可以查看CA机构的颁发信息,以便为您的客户提供的更多信任。

  HTTPS还可以防止网络钓鱼攻击。网络钓鱼电子邮件是冒充您网站来进行犯罪的,钓鱼电子邮件通常包含指向其网站的链接或使用中间人攻击来达到目的。由于这些违规现象无法获得正规CA机构颁发的SSL证书,因此他们无法完全冒充您的网站。这意味着您的用户陷入网络钓鱼网站的可能性很小。

image.png

在现代数字商业领域,仅靠网站展示绿色“安全锁”,已无法满足用户复杂的信任需求。当用户、合作伙伴及监管机构共同质疑“运营方主体身份”时,企业亟需更有说服力的解决方案。虽然DV证书可以实现数据加密,有效防止数据被盗取或篡改,但企业的身份却依旧隐藏在匿名之中。而EV证书虽然具备最高级别的身份认证,可视化效果显著。但严格的申请流程与相对较高的费用,并非适合所有企业在每个发展阶段采用。在这一信任需求的梯度范围内,OV证书凭借能力与成本的平衡点,成为企业从“身份模糊”迈向“可信认证”的战略性选择。JoySSL技术处专家强调,组织验证型证书的核心价值在于其对身份公信力、成本效率及广泛适用性的理想兼顾。不仅是合格的解决方案,更是企业在数字经济体系中开展合规运营、树立信誉、建立安全合作关系的标准配置。

权威身份验证 OV证书构建企业信任基础

相比DV证书,OV证书的显著特点在于其验证机制由人工审核主导,而非完全依赖自动化流程。部署OV证书的网站,其背后运营者的身份不再是无法识别的匿名。这一身份认证,显著提高了仿冒与钓鱼行为的难度。在B2B业务、电子商务以及金融服务等领域,这种认证成为企业构建信任的基础技术手段。

全面安全防护 超越数据加密完善风险管理

OV证书提供与高级别证书相等强度的加密技术,采用国际标准的高强度加密算法,确保用户与网站之间的所有数据交互,在传输过程中保持机密性与完整性,满足不同行业对数据安全的核心诉求。同时,OV证书还承担重要的责任保障功能。通过提供高额保修服务,企业能够有效规避潜在风险,相当于为企业添加了一层“风险屏障”,有助于完善其自身的风险管理体系。

高兼容高灵活 SSL证书适应多样化业务需求

OV证书的研发,旨在满足现代企业复杂的IT环境,以及未来扩展的可能性。无论用户身处何地,都能够利用证书无障碍且无警告地浏览,为企业开展国际化业务提供技术支持。灵活的证书形式是拥有多个子站点、API接口或SaaS平台的企业的理想选择,适应企业多样化业务需求。

精准市场定位 传统IT技术转型企业战略资产

面对强监管和激烈竞争的市场环境,JoySSL认为,OV证书的价值正从传统的IT技术,转型为企业的战略资产。随着《网络安全法》、《数据安全法》的逐步推行,OV证书严格的身份验证流程,为合规审计提供了技术支持,成为行业监管基线下的通行标准。这种信任的附加价值能够降低用户在注册、信息提交或交易过程中所面临的心理障碍,从而提高转化率并增进客户忠诚度。

重视品牌信誉 OV证书助力企业数字化发展

选择SSL证书的核心,是在数字世界中定义企业的存在方式。OV证书体现了一种成熟、稳重且负责任的态度。它倡导透明,强调保护,突出责任,重视品牌与信誉,为未来合作与发展铺设信任的基石。OV证书不是“可选项”,而是企业提升数字竞争力,赢得稳固而长久商业信任的关键所在。

请我打款(bushi)

给我博客加点流量吧,我到时候一些文章放在我的博客上面
博客

kiro 协议注册流程分析

整体架构

┌─────────────────────────────────────────────────────────────────┐
│                        注册流程总览                              │
├─────────────────────────────────────────────────────────────────┤
│  1. OIDC 客户端注册 → 2. 设备授权 → 3. 邮箱创建                  │
│  4. Portal 登录初始化 → 5. Workflow 初始化                       │
│  6. 邮箱提交 → 7. 进入注册流程 → 8. Profile 创建                 │
│  9. 邮箱验证 → 10. 身份创建 → 11. 密码设置                       │
│  12. 登录完成 → 13. SSO Token → 14. 设备授权确认                 │
│  15. Token 关联 → 16. 获取最终 Refresh Token                     │
└─────────────────────────────────────────────────────────────────┘

核心组件

1. JWE 加密器 (JWEEncryptor)

用于密码的安全传输,采用 JWE (JSON Web Encryption) 标准。

加密流程:

1. 从服务器获取 RSA 公钥 (JWK 格式)
2. 生成随机 CEK (Content Encryption Key, 256-bit)
3. 使用 RSA-OAEP-256 加密 CEK
4. 构建 JWT Claims (包含密码、时间戳、issuer、audience 等)
5. 使用 A256GCM 对称加密 JWT Claims
6. 输出 JWE Compact Serialization 格式

JWE Header 结构:

{ "alg": "RSA-OAEP-256", "kid": "<key-id>", "enc": "A256GCM", "cty": "enc", "typ": "application/aws+signin+jwe" } 

JWT Claims 结构:

{ "iss": "<region>.<issuer>", "iat": <timestamp>, "nbf": <timestamp>, "jti": "<uuid>", "exp": <timestamp + 300>, "aud": "<region>.<audience>", "password": "<password>" } 

2. 指纹生成器 (FingerprintGenerator)

生成浏览器指纹用于反欺诈检测。

生成的标识符:

  • fingerprint: 浏览器环境指纹 (Base64 编码的加密数据)
  • visitorId: 访客唯一标识 (UUID 格式)
  • ubid: 平台用户标识 (数字格式)

3. 浏览器数据生成器 (BrowserDataGenerator)

模拟真实浏览器行为数据。

数据结构:

{ "attributes": { "fingerprint": "<fingerprint>", "eventTimestamp": "<ISO8601>", "timeSpentOnPage": "<milliseconds>", "eventType": "PageLoad|PageSubmit", "ubid": "<ubid>", "pageName": "<page>", "visitorId": "<visitor-id>" }, "cookies": {} } 

详细流程分析

Phase 1: OIDC 初始化

Step 1: 注册 OIDC 客户端

端点: POST /client/register

请求:

{ "clientName": "Amazon Q Developer for command line", "clientType": "public", "scopes": ["codewhisperer:completions", "codewhisperer:analysis", "codewhisperer:conversations"] } 

响应:

{ "clientId": "<client-id>", "clientSecret": "<client-secret>" } 

Step 2: 设备授权

端点: POST /device_authorization

请求:

{ "clientId": "<client-id>", "clientSecret": "<client-secret>", "startUrl": "https://view.awsapps.com/start" } 

响应:

{ "deviceCode": "<device-code>", "userCode": "<user-code>", "verificationUri": "<url>", "verificationUriComplete": "<url-with-code>" } 

Phase 2: 账号创建

Step 3: 临时邮箱创建

支持两种邮箱服务:

  1. mail.tm (公开 API)
  2. 私有邮箱服务 (备用)

mail.tm 流程:

1. GET /domains → 获取可用域名
2. POST /accounts → 创建邮箱账户
3. POST /token → 获取访问令牌

Phase 3: Portal 登录流程

Step 4: 初始化 Portal Login

端点: GET /login?directory_id=view&redirect_url=<url>

响应:

{ "redirectUrl": "https://signin.aws/platform/<directory>/login?workflowStateHandle=<handle>" } 

关键参数:

  • workflowStateHandle: 工作流状态句柄,贯穿整个流程

Step 5: 访问 Signin 页面

模拟浏览器访问登录页面,获取必要的 Cookies:

  • platform-ubid
  • login-interview-token

Step 6-7: Workflow 初始化

端点: POST /platform/<directory>/api/execute

两次 POST 请求:

  1. 第一次 (stepId=“”): 初始化工作流
  2. 第二次 (stepId=“start”): 获取 aws-usi-authn Cookie

请求结构:

{ "stepId": "", "workflowStateHandle": "<handle>", "inputs": [ {"input_type": "FingerPrintRequestInput", "fingerPrint": "<fingerprint>"} ], "requestId": "<uuid>" } 

Phase 4: 用户注册

Step 8: 提交邮箱 (SUBMIT)

关键 Cookie 设置:

  1. awsccc: Base64 编码的 JSON (包含 consent 信息)
  2. awsd2c-token-c: 从 vs.aws.amazon.com/token 获取的 D2C Token

请求:

{ "stepId": "get-identity-user", "workflowStateHandle": "<handle>", "actionId": "SUBMIT", "inputs": [ {"input_type": "UserRequestInput", "username": "<email>"}, {"input_type": "ApplicationTypeRequestInput", "applicationType": "SSO_INDIVIDUAL_ID"}, {"input_type": "UserEventRequestInput", ...}, {"input_type": "FingerPrintRequestInput", ...} ], "visitorId": "<visitor-id>" } 

响应处理:

  • 200: 用户已存在 (登录流程)
  • 400 + ENTITY_DOES_NOT_EXIST: 用户不存在 (继续注册)

Step 9: 进入注册 (SIGNUP)

请求:

{ "stepId": "get-identity-user", "workflowStateHandle": "<handle>", "actionId": "SIGNUP", "inputs": [...] } 

响应:

{ "redirect": { "url": "/signup?workflowStateHandle=<new-handle>" }, "presentationContext": { "workflowId": "<workflow-id>" } } 

Step 10-10.5: Signup 页面初始化

两次 POST 到 /signup/api/execute

  1. 第一次 (stepId=“”): 初始化注册页面
  2. 第二次 (stepId=“start”): 获取 workflowId

Phase 5: Profile 创建与验证

Step 11: Profile /api/start

端点: POST /api/start

请求:

{ "workflowID": "<workflow-id>", "browserData": {...} } 

响应:

{ "workflowState": "<encrypted-state>" } 

Step 12: 发送验证码

端点: POST /api/send-otp

请求:

{ "workflowState": "<state>", "email": "<email>", "browserData": {...} } 

Step 13: 获取验证码

从邮箱服务获取 6 位数字验证码。

轮询策略:

  • 最大重试次数: 30
  • 间隔: 5 秒
  • 正则匹配: \b(\d{6})\b

Step 14: 创建身份

端点: POST /api/create-identity

请求:

{ "workflowState": "<state>", "userData": { "email": "<email>", "fullName": "<name>" }, "otpCode": "<6-digit-code>", "browserData": {...} } 

响应:

{ "registrationCode": "<code>", "signInState": "<base64-state>" } 

Phase 6: 密码设置

Step 15: 初始化密码设置页面

端点: POST /signup/api/execute

请求:

{ "stepId": "", "state": "<sign-in-state>", "inputs": [ {"input_type": "UserRegistrationRequestInput", "registrationCode": "<code>", "state": "<state>"}, {"input_type": "FingerPrintRequestInput", ...} ] } 

响应 (关键):

{ "workflowStateHandle": "<password-handle>", "stepId": "get-new-password-for-password-creation", "workflowResponseData": { "encryptionContextResponse": { "publicKey": { "kid": "<key-id>", "n": "<modulus>", "e": "<exponent>", "alg": "RSA-OAEP-256" }, "issuer": "signin.aws", "audience": "AWSPasswordService", "region": "us-east-1" } } } 

Step 16: 设置密码

关键修复点:

  1. CSRF Token 处理:

    • directory-csrf-token: 只包含 loginCsrfToken
    • workflow-csrf-token: 包含 loginCsrfToken + signupCsrfToken
  2. Cookie 顺序 (重要):

    directory-csrf-token → aws-usi-authn → platform-ubid → 
    login-interview-token → workflow-step-id → workflow-csrf-token → 
    workflow-csrftoken → awsccc → awsd2c-token-c
    
  3. 密码加密:

    • 使用服务器返回的公钥进行 JWE 加密
    • Plaintext 填充到 192 字节

请求:

{ "stepId": "get-new-password-for-password-creation", "workflowStateHandle": "<password-handle>", "actionId": "SUBMIT", "inputs": [ { "input_type": "PasswordRequestInput", "password": "<jwe-encrypted-password>", "successfullyEncrypted": "SUCCESSFUL", "errorLog": null }, {"input_type": "UserEventRequestInput", ...}, {"input_type": "UserRequestInput", "username": "<email>"}, {"input_type": "FingerPrintRequestInput", ...} ], "visitorId": "<visitor-id>" } 

成功响应:

{ "stepId": "end-of-user-registration-success", "redirect": { "url": "/login?workflowStateHandle=<handle>&workflowResultHandle=<auth-code>" } } 

Phase 7: 获取 Token

Step 17: 完成登录流程

set_password 响应的重定向 URL 中提取 workflowResultHandle (即 authCode)。

Step 18: 获取 SSO Token

端点: POST /auth/sso-token

请求 (x-www-form-urlencoded):

authCode=<auth-code>&state=<state>&orgId=view

Headers:

x-amz-sso-csrf-token: <login-csrf-token>

响应:

{ "token": "<user-session-id>", "redirectUrl": "<url>" } 

Step 19: 接受设备授权

端点: POST /device_authorization/accept_user_code

请求:

{ "userCode": "<user-code>", "userSessionId": "<session-id>" } 

响应:

{ "deviceContext": { "clientId": "<client-id>", "deviceContextId": "<context-id>" } } 

Step 20: 关联 Token

端点: POST /device_authorization/associate_token

请求:

{ "deviceContext": {...}, "userSessionId": "<session-id>" } 

Step 21: 获取最终 Token

端点: POST /token

请求:

{ "clientId": "<client-id>", "clientSecret": "<client-secret>", "deviceCode": "<device-code>", "grantType": "urn:ietf:params:oauth:grant-type:device_code" } 

轮询处理:

  • authorization_pending: 等待 2 秒重试
  • slow_down: 等待 5 秒重试

成功响应:

{ "accessToken": "<access-token>", "refreshToken": "aor-<refresh-token>" } 

关键技术点

1. Cookie 管理

Cookie 名称用途
awscccsignin.aws用户同意信息 (Base64 编码)
awsd2c-token-csignin.awsD2C Token (JWT)
login-interview-tokensignin.aws登录会话 Token
aws-usi-authnsignin.aws认证 Token
workflow-step-idsignin.aws当前工作流步骤
directory-csrf-tokensignin.awsCSRF 保护
workflow-csrf-tokensignin.aws工作流 CSRF 保护

2. 状态管理

workflowStateHandle → 工作流状态句柄 (URL 参数)
login-interview-token → 登录会话 Token (Cookie)
signInState → 登录状态 (Base64 编码的 JSON)
workflowState → 工作流状态 (加密字符串)

3. 请求头模拟

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ...
sec-ch-ua: "Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
sec-fetch-dest: empty
sec-fetch-mode: cors
sec-fetch-site: same-origin

4. 错误处理

错误码含义处理方式
ENTITY_DOES_NOT_EXIST用户不存在继续注册流程
SIGNIN_BAD_REQUEST_ERROR请求格式错误检查 Cookie/Header
authorization_pending授权待处理轮询重试
slow_down请求过快增加等待时间

安全考虑

  1. 密码传输: 使用 JWE 加密,RSA-OAEP-256 + A256GCM
  2. CSRF 保护: 多层 CSRF Token 验证
  3. 指纹验证: 浏览器指纹用于反欺诈
  4. 会话管理: 多个 Token 协同工作

版本演进

版本关键修复
V7awsccc Cookie Base64 编码、D2C Token 获取时机
V8SIGNUP 流程 workflowStateHandle 保存
V9signin_visitor_id 一致性
V10aws-usi-authn Cookie 更新
V13-V16Cookie 顺序、CSRF Token 处理
V20-V21重复 Cookie 清理、手动构建 Cookie Header
V22JWE 加密使用服务器返回的 issuer/audience
V24-V25登录完成流程、SSO Token 获取

流程图

┌──────────────┐     ┌──────────────┐     ┌──────────────┐
│  OIDC 注册   │────▶│  设备授权    │────▶│  邮箱创建    │
└──────────────┘     └──────────────┘     └──────────────┘
                                                 │
                                                 ▼
┌──────────────┐     ┌──────────────┐     ┌──────────────┐
│  Workflow    │◀────│  Signin 页面 │◀────│  Portal 登录 │
│  初始化      │     │  访问        │     │  初始化      │
└──────────────┘     └──────────────┘     └──────────────┘
       │
       ▼
┌──────────────┐     ┌──────────────┐     ┌──────────────┐
│  邮箱提交    │────▶│  SIGNUP      │────▶│  Profile     │
│  (SUBMIT)    │     │  进入注册    │     │  创建        │
└──────────────┘     └──────────────┘     └──────────────┘
                                                 │
                                                 ▼
┌──────────────┐     ┌──────────────┐     ┌──────────────┐
│  身份创建    │◀────│  验证码获取  │◀────│  发送 OTP    │
└──────────────┘     └──────────────┘     └──────────────┘
       │
       ▼
┌──────────────┐     ┌──────────────┐     ┌──────────────┐
│  密码页面    │────▶│  设置密码    │────▶│  登录完成    │
│  初始化      │     │  (JWE 加密)  │     │              │
└──────────────┘     └──────────────┘     └──────────────┘
                                                 │
                                                 ▼
┌──────────────┐     ┌──────────────┐     ┌──────────────┐
│  Token 关联  │◀────│  设备授权    │◀────│  SSO Token   │
│              │     │  确认        │     │  获取        │
└──────────────┘     └──────────────┘     └──────────────┘
       │
       ▼
┌──────────────┐
│  获取最终    │
│  Refresh     │
│  Token       │
└──────────────┘

依赖库

  • requests: HTTP 请求
  • cryptography: JWE 加密 (RSA-OAEP-256, A256GCM)
  • gzip: 响应解压


本文档仅供技术学习研究使用


📌 转载信息
原作者:
lansonsam
转载时间:
2026/1/4 12:30:09