Aws基础:修订间差异

来自linuxsa wiki
跳转到导航 跳转到搜索
Evan留言 | 贡献
Evan留言 | 贡献
无编辑摘要
第7行: 第7行:


https://calculator.aws/#/
https://calculator.aws/#/
 
=[[AWS Certification]]=
=[[AWS cli Setup and aws console access]]=
=[[AWS cli Setup and aws console access]]=



2026年1月10日 (六) 05:48的版本

pre

默认得加pubkey ec2 都叫启动


https://cidr.xyz/

https://calculator.aws/#/

AWS Certification

AWS cli Setup and aws console access

Elastic IP 和 Public IP 的区别

创建EC2实例的时候,我们可以勾选“自动分配Public IP”(原话是英文的哦~),也可以不勾选,然后手动关联Elastic IP(EIP),那么着二者有什么区别呢? 从亚马逊在线技术支持那里了解到: (1)EIP是属于某个特定的账号,可以关联到账号的任意实例上,也可卸载下来重新关联到其他实例上,而且实例被删除之后,EIP依然单独存在。(分配EIP时注意VPC和EC2的EIP的区别,不同类型的EIP时能关联到自己类型的实例上,即VPC中的EIP只能用于VPC中的实例,Classic EC2只能关联非VPC的EIP) (2)而普通的Public IP是属于具体的某台实例,不能卸载重新关联到别的实例,实例创建时,如果勾选自动分配Public IP,则会随实例一起被创建,实例删除时,跟着被删除,无法被重复利用和保留; (3)还有一个非常重要的特性:Public IP在实例关机后再开机,可能会改变,重启不影响(这跟Classic EC2实例的Public DNS一样,可能会改变)。而EIP怎么都不会变。 (4)如果实例创建之初,有PublicIP,然后再关联了ElasticIP的话,二者都会变成ElasticIP的样子(被覆盖),当EIP被解除关联之后,PublicIP才会被显露,但此时会重新分配PublicIP,所以PublicIP会变。 所以,如果在EC2实例的生命周期内,有停机再开机的可能,还是使用EIP比较保险 ———————————————— 版权声明:本文为CSDN博主「fedora18」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/fedora18/article/details/44219493

vpc

role

如果角色已经存在,只需两步就能把现有角色改成“RDS 可用”:

    改信任关系(Trust relationship)

IAM → Roles → 选中你的角色 → Trust relationships 标签 → Edit trust policy
把内容替换成下面这段(只保留一条 Statement,Principal 写死 rds.amazonaws.com):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "rds.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

→ Update policy
(这一步就让 RDS 有权限代入该角色)

2.    挂 S3 写权限(如果还没挂)

还是在同一个角色页面 → Permissions 标签 → Add permissions → Create inline policy → JSON 模式:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:PutObjectAcl",
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::mslog",
        "arn:aws:s3:::mslog/*"
      ]
    }
  ]
}
→ Review → 名字随便起(如 mslog-rds-s3)→ Create policy
完事
角色 ARN 不变,直接拿它填到 SQLSERVER_AUDIT 选项的 IAM_ROLE_ARN 即可,无需重新建角色。


rule

#复制 AWS Config Rule(同账号同Region)
import boto3
import json

def copy_config_rule(source_rule_name, target_rule_name, description_suffix=" (copy)"):
    client = boto3.client('config')

    # 获取原规则定义
    response = client.describe_config_rules(ConfigRuleNames=[source_rule_name])
    rules = response.get("ConfigRules", [])

    if not rules:
        print(f"❌ 未找到规则: {source_rule_name}")
        return

    rule = rules[0]

    # 删除不允许出现在 put-config-rule 的字段
    for key in ["ConfigRuleId", "ConfigRuleArn", "CreatedBy"]:
        rule.pop(key, None)

    # 修改名称和描述
    rule["ConfigRuleName"] = target_rule_name
    if "Description" in rule:
        rule["Description"] += description_suffix
    else:
        rule["Description"] = f"Copied from {source_rule_name}"

    # 重新创建规则
    try:
        client.put_config_rule(ConfigRule=rule)
        print(f"✅ 成功复制规则: {source_rule_name} → {target_rule_name}")
    except Exception as e:
        print(f"❌ 创建规则失败: {e}")

if __name__ == "__main__":
    # 示例
    SOURCE_RULE = "required-tags"          # 要复制的原规则名
    TARGET_RULE = "required-tags-copy"     # 新规则名

    copy_config_rule(SOURCE_RULE, TARGET_RULE)

AWSS3

#pre 配置好aws cli 相关配置和key
➜  ~ aws s3 ls 
2025-06-30 21:56:24 evan886
➜  ~ aws s3 ls  s3://evan886
➜  ~ echo "s3test" >tests3.txt
➜  ~ aws s3 cp tests3.txt  s3://evan886
upload: ./tests3.txt to s3://evan886/tests3.txt   

打开web界面确认一下 

➜  ~ aws s3 cp s3://evan886/tests3.txt ts3.txt
download: s3://evan886/tests3.txt to ./ts3.txt                 
➜  ~ cat ts3.txt 
s3test

➜  ~ aws s3 rm s3://evan886/tests3.txt
delete: s3://evan886/tests3.txt
➜  ~ aws s3 rm s3://evan886  --recursive 
➜  ~ aws s3 ls s3://evan886
➜  ~ 

boto3

aws Lambda

【粤语】Serverless _ AWS Lambda有趣的介绍


1.1 what is lambda https://www.bilibili.com/video/BV1z4411E7gE/?spm_id_from=333.337.search-card.all.click&vd_source=e3e41ea2b1d70e0e3a6a0372ee88d714

AWS Lambda零基础入门 25分钟学会Python核心技能 🌟

https://www.bilibili.com/video/BV1pcQmYuEFc/?spm_id_from=333.337.search-card.all.click&vd_source=e3e41ea2b1d70e0e3a6a0372ee88d714


➜  lambda py3  main.py
b'{"statusCode": 200, "body": "\\"File uploaded successfully!\\""}'
➜  lambda cat main.py
import json
import boto3
import base64
client = boto3.client('lambda')

with open('example.txt','rb') as file:
    file_content = base64.b64encode(file.read()).decode('utf-8')

payload = {
    'file_name': 'uploaded_example.txt',
    'file_content': file_content

        }


response = client.invoke(
    #FunctionName='string-reversal',
    FunctionName='s3lambda',
    Payload=json.dumps(payload)
)

print(response['Payload'].read())
➜  lambda 


#my lmabda  name :s3lambda

import json
import boto3
import base64

s3_client = boto3.client('s3',region_name='us-west-1')
def lambda_handler(event, context):


    file_name = event['file_name']
    file_content = event['file_content']

    if not file_name or  not file_content:
        return {
            'statusCode': 400,
            'body': json.dumps('missing File name and content are required!')
        }
    try:
        file_content = base64.b64decode(file_content)

        s3_client.put_object(Bucket='mylambdafancy', Key=file_name, Body=file_content)

        return {
            'statusCode': 200,
            'body': json.dumps('File uploaded successfully!')
        }

    except Exception as e:
        print(e)
        return {
            'statusCode': 500,
            'body': json.dumps('Error uploading file!' + str(e))
        }



SSM

AWS SAP - 9.5 部署 - AWS system manager (SSM)

automation document 只是带过而已 https://www.bilibili.com/video/BV1oG411z7ap/?spm_id_from=333.337.search-card.all.click&vd_source=e3e41ea2b1d70e0e3a6a0372ee88d714


SSM Automation

ACM

how to check if the cert chain had been upgrade to remove starfield c2

ACM will no longre cros sign certificates with starfield class 2 starting

https://www.ssllabs.com/ssltest/


https://repost.aws/questions/QU7ZP_50i7T_qpjN7ZikSHjQ/how-to-solve-new-amazon-public-certificates-no-longer-chain-to-the-starfield-class-2-certification-authorit

https://aws.amazon.com/cn/blogs/security/acm-will-no-longer-cross-sign-certificates-with-starfield-class-2-starting-august-2024/

py

file.txt

#txt
wiki.linuxchina.net
www.google.com
www.github.com
www.baidu.com

# 这是注释,会被自动忽略
example.com
yourdomain.com



#pyfile
import ssl
import socket
import sys
from OpenSSL import crypto

# ======================
# ✅ 从 hosts.txt 文件中读取域名列表
# ======================
HOSTS_FILE = "hosts.txt"  # 确保此文件与脚本在同一目录,或修改为绝对路径

# Starfield 相关关键词
STARFIELD_KEYWORDS = [
    "Starfield Technologies, Inc.",
    "Starfield Class 2 Certification Authority"
]

def read_domains_from_file(filename):
    """从文件中读取域名列表,自动跳过空行和以 # 开头的注释行"""
    domains = []
    try:
        with open(filename, "r", encoding="utf-8") as f:
            for line in f:
                line = line.strip()  # 去掉首尾空格和换行
                if not line or line.startswith("#"):
                    continue  # 跳过空行和注释
                domains.append(line)
    except FileNotFoundError:
        print(f"[❌] 错误:找不到文件 '{filename}',请确保它与脚本在同一目录。")
        sys.exit(1)
    except Exception as e:
        print(f"[❌] 读取文件时出错:{e}")
        sys.exit(1)
    return domains

def get_certificate_chain(domain, port=443):
    """获取域名证书链(返回 OpenSSL X509 对象列表)"""
    cert_chain = []
    try:
        ctx = ssl.create_default_context()
        with socket.create_connection((domain, port), timeout=10) as sock:
            with ctx.wrap_socket(sock, server_hostname=domain) as ssock:
                der_certs = ssock.getpeercert(chain=True)
                if not der_certs:
                    print(f"[!] 域名 {domain}:无法获取证书链")
                    return []
                for der_cert in der_certs:
                    cert = crypto.load_certificate(crypto.FILETYPE_ASN1, der_cert)
                    cert_chain.append(cert)
    except Exception as e:
        print(f"[!] 域名 {domain}:获取证书时出错 - {e}")
        return []
    return cert_chain

def check_starfield_issuer(cert):
    """检查证书的 Issuer 是否包含 Starfield 关键词"""
    try:
        issuer = cert.get_issuer()
        issuer_str = issuer.rfc4514_string()
        for keyword in STARFIELD_KEYWORDS:
            if keyword in issuer_str:
                return True
    except Exception as e:
        print(f"[!] 域名 {cert.get_subject().rfc4514_string()}:解析 Issuer 出错 - {e}")
    return False

def analyze_domain(domain):
    """分析单个域名的证书链是否包含 Starfield"""
    print(f"\n" + "="*50)
    print(f"🔍 正在检查域名:{domain}")
    chain = get_certificate_chain(domain)

    if not chain:
        print(f"❌ 域名 {domain}:无法获取证书链,跳过。")
        return

    print(f"📜 共获取到 {len(chain)} 个证书。")

    found_starfield = False
    for idx, cert in enumerate(chain):
        try:
            subject = cert.get_subject().rfc4514_string()
            issuer = cert.get_issuer().rfc4514_string()

            print(f"\n🔒 证书 #{idx + 1}:")
            print(f"   Subject(使用者): {subject}")
            print(f"   Issuer(颁发者): {issuer}")

            if check_starfield_issuer(cert):
                print("   ⚠️ [发现] 该证书由 Starfield Class 2 或相关 CA 签发!")
                found_starfield = True
            else:
                print("   ✅ [安全] 该证书与 Starfield Class 2 无关。")
        except Exception as e:
            print(f"   ⚠️ 解析证书 #{idx+1} 时出错:{e}")

    if found_starfield:
        print(f"\n🔴 结论({domain}):❌ 证书链 **仍然包含 Starfield Class 2,尚未移除。**")
    else:
        print(f"\n🟢

list

import ssl
import socket
import sys
from OpenSSL import crypto

# ======================
# ✅ 在这里设置你要检查的域名列表
# ======================
DOMAINS = [
    "wiki.linuxchina.net",
    "www.google.com",
    "www.github.com",
    "www.baidu.com",
    # 你可以继续添加更多域名,例如:
    # "example.com",
    # "yourdomain.com",
]

# Starfield 相关关键词(用于检查 Issuer)
STARFIELD_KEYWORDS = [
    "Starfield Technologies, Inc.",
    "Starfield Class 2 Certification Authority"
]

def get_certificate_chain(domain, port=443):
    """获取指定域名的证书链(返回 OpenSSL X509 对象列表)"""
    cert_chain = []
    try:
        ctx = ssl.create_default_context()
        with socket.create_connection((domain, port), timeout=10) as sock:
            with ctx.wrap_socket(sock, server_hostname=domain) as ssock:
                der_certs = ssock.getpeercert(chain=True)
                if not der_certs:
                    print(f"[!] 域名 {domain}:无法获取证书链")
                    return []
                for der_cert in der_certs:
                    cert = crypto.load_certificate(crypto.FILETYPE_ASN1, der_cert)
                    cert_chain.append(cert)
    except Exception as e:
        print(f"[!] 域名 {domain}:获取证书时出错 - {e}")
        return []
    return cert_chain

def check_starfield_issuer(cert):
    """检查单个证书的 Issuer 是否包含 Starfield 关键词"""
    try:
        issuer = cert.get_issuer()
        issuer_str = issuer.rfc4514_string()  # 标准格式的 Issuer DN
        for keyword in STARFIELD_KEYWORDS:
            if keyword in issuer_str:
                return True
    except Exception as e:
        print(f"[!] 域名 {cert.get_subject().rfc4514_string()}:解析 Issuer 出错 - {e}")
    return False

def analyze_domain(domain):
    """分析单个域名的证书链是否包含 Starfield"""
    print(f"\n" + "="*50)
    print(f"🔍 正在检查域名:{domain}")
    chain = get_certificate_chain(domain)

    if not chain:
        print(f"❌ 域名 {domain}:无法获取证书链,跳过。")
        return

    print(f"📜 共获取到 {len(chain)} 个证书。")

    found_starfield = False
    for idx, cert in enumerate(chain):
        try:
            subject = cert.get_subject().rfc4514_string()
            issuer = cert.get_issuer().rfc4514_string()

            print(f"\n🔒 证书 #{idx + 1}:")
            print(f"   Subject(使用者): {subject}")
            print(f"   Issuer(颁发者): {issuer}")

            if check_starfield_issuer(cert):
                print("   ⚠️ [发现] 该证书由 Starfield Class 2 或相关 CA 签发!")
                found_starfield = True
            else:
                print("   ✅ [安全] 该证书与 Starfield Class 2 无关。")
        except Exception as e:
            print(f"   ⚠️ 解析证书 #{idx+1} 时出错:{e}")

    if found_starfield:
        print(f"\n🔴 结论({domain}):❌ 证书链 **仍然包含 Starfield Class 2,尚未移除。**")
    else:
        print(f"\n🟢 结论({domain}):✅ 证书链 **没有发现 Starfield Class 2,已升级/移除。**")

def main():
    print("[🚀] 开始批量检查多个域名的证书链是否包含 Starfield Class 2...")
    for domain in DOMAINS:
        analyze_domain(domain)
    print("\n" + "="*50)
    print("[✅] 所有域名检查完毕!")

if __name__ == "__main__":
    main()

好的!下面我将为你提供一个 一键检查脚本,用于 自动化检查某个域名(比如 wiki.linuxchina.net)的 SSL 证书链,判断是否包含 Starfield Class 2 认证机构(CA)。

✅ 脚本功能

功能 是否支持

输入一个域名(如 wiki.linuxchina.net) ✅

自动获取该域名的 SSL 证书链 ✅(使用 OpenSSL 或 Python 内置库)

自动分析证书链中的每个证书 ✅

检查是否存在 Starfield Technologies, Inc. 以及 Starfield Class 2 Certification Authority ✅

输出清晰的结果:是否包含 Starfield Class 2 ✅

支持 Shell 脚本(Bash) 和 Python 脚本 两种方式 ✅ 两种都提供

🧩 方法一:Python 脚本(推荐,跨平台,无需额外依赖)

适用于 Linux、macOS、Windows(需安装 Python 3)

✅ 脚本名称:check_starfield_in_chain.py

import ssl
import socket
import sys
from OpenSSL import crypto

# 要检查的域名
DOMAIN = "wiki.linuxchina.net"  # 你可以修改为任意域名

# Starfield 相关关键词
STARFIELD_KEYWORDS = [
    "Starfield Technologies, Inc.",
    "Starfield Class 2 Certification Authority"
]

def get_certificate_chain(domain, port=443):
    """获取指定域名的证书链(返回 OpenSSL.crypto.X509 对象列表)"""
    cert_chain = []

    try:
        # 创建 SSL 上下文
        ctx = ssl.create_default_context()
        with socket.create_connection((domain, port)) as sock:
            with ctx.wrap_socket(sock, server_hostname=domain) as ssock:
                # 获取证书链(底层是 OpenSSL 对象)
                der_certs = ssock.getpeercert(chain=True)
                if not der_certs:
                    print("[!] 无法获取证书链。")
                    return []

                for der_cert in der_certs:
                    cert = crypto.load_certificate(crypto.FILETYPE_ASN1, der_cert)
                    cert_chain.append(cert)
    except Exception as e:
        print(f"[!] 获取证书时出错: {e}")
        return []

    return cert_chain

def check_starfield_issuer(cert):
    """检查单个证书的 Issuer 是否包含 Starfield 关键词"""
    try:
        issuer = cert.get_issuer()
        issuer_str = issuer.rfc4514_string()  # 或使用其他格式
        # 也可以用:issuer.get_components() 手动解析
        for keyword in STARFIELD_KEYWORDS:
            if keyword in issuer_str:
                return True
    except Exception as e:
        print(f"[!] 解析证书 Issuer 出错: {e}")
    return False

def main():
    print(f"🔍 正在检查域名:{DOMAIN}")
    chain = get_certificate_chain(DOMAIN)

    if not chain:
        print("[❌] 未能获取到证书链,请检查网络或域名是否正确。")
        return

    print(f"📜 共获取到 {len(chain)} 个证书。")

    found_starfield = False
    for idx, cert in enumerate(chain):
        issuer_str = cert.get_issuer().rfc4514_string()
        subject_str = cert.get_subject().rfc4514_string()

        print(f"\n🔒 证书 #{idx + 1}:")
        print(f"   Subject (使用者): {subject_str}")
        print(f"   Issuer  (颁发者): {issuer_str}")

        if check_starfield_issuer(cert):
            print("   ⚠️  [发现] 该证书由 Starfield Class 2 或相关 CA 签发!")
            found_starfield = True
        else:
            print("   ✅ [安全] 该证书与 Starfield Class 2 无关。")

    if found_starfield:
        print("\n🔴 结论:该域名的证书链 **仍然包含 Starfield Class 2 相关证书,尚未移除。**")
    else:
        print("\n🟢 结论:该域名的证书链 **没有发现 Starfield Class 2,已经升级/移除。**")

if __name__ == "__main__":
    main()


🧰 运行方法(Python 脚本)

1. 确保你已安装 Python 3

在终端 / CMD 中运行:
python --version


或
python3 --version


确保是 Python 3.6 或更高版本

2. 安装依赖库:pyOpenSSL

运行以下命令安装:
pip install pyopenssl


或
pip3 install pyopenssl


3. 将上面的代码保存为:

📄 check_starfield_in_chain.py

4. 运行脚本:

python check_starfield_in_chain.py


或
python3 check_starfield_in_chain.py


5. 查看输出

脚本会:

• 显示该域名的证书链中有几个证书

• 逐个显示每个证书的 Subject(使用者) 和 Issuer(颁发者)

• 如果某个证书的 Issuer 包含 Starfield Technologies, Inc. 或 Starfield Class 2 Certification Authority,就会提示发现

• 最后给出结论:是否仍然包含 Starfield Class 2

🧩 方法二:Shell 脚本(Bash + OpenSSL)—— 适用于 Linux / macOS

如果你更喜欢用 Shell 脚本,且你的系统支持 openssl 命令,可以使用这个简化版本:

✅ 脚本名称:check_starfield.sh

#!/bin/bash

DOMAIN="wiki.linuxchina.net"  # 你可以修改这个域名

echo "🔍 正在检查域名:$DOMAIN 的证书链..."

echo "--------------------------------------------------"
echo "📡 获取证书链信息:"

openssl s_client -showcerts -connect "$DOMAIN":443 2>/dev/null <<EOF | awk '
BEGIN { in_cert=0; cert_count=0 }
/-----BEGIN CERTIFICATE-----/ { in_cert=1; cert_count++ ; print "\n🔒 证书 #' cert_count }
/-----END CERTIFICATE-----/ { in_cert=0; print "" }
in_cert { print }
' | grep -A1000 "-----BEGIN CERTIFICATE-----"

echo "--------------------------------------------------"
echo "🔍 开始分析 Issuer 是否包含 Starfield ..."

# 提取所有证书并分析 Issuer
echo | openssl s_client -connect "$DOMAIN":443 2>/dev/null | \
  awk '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/' | \
  awk 'BEGIN { RS="-----END CERTIFICATE-----"; FS="\n" } 
       NR>0 { 
         cert = $0 "-----END CERTIFICATE-----";
         cmd = "echo \"" cert "\" | openssl x509 -noout -issuer 2>/dev/null";
         cmd | getline issuer;
         close(cmd);
         if (issuer ~ /Starfield Technologies, Inc.|Starfield Class 2 Certification Authority/) {
           print "⚠️ [发现] Starfield 相关 Issuer: " issuer;
           found=1;
         } else if (issuer) {
           print "✅ 证书 Issuer: " issuer;
         }
       }'

if [ "$found" = "1" ]; then
  echo "🔴 结论:该域名证书链 **包含 Starfield Class 2,尚未移除。**"
else
  echo "🟢 结论:该域名证书链 **没有发现 Starfield Class 2,已升级/移除。**"
fi


⚠️ 注意:这个 Shell 版本是简化逻辑,可能不如 Python 版精准,但也能大致分析。

✅ 推荐使用:Python 脚本

对比项 Python 脚本 Shell 脚本

精准度 ✅ 高(使用 pyOpenSSL 解析 Issuer 更准确) ⚠️ 一般(依赖 grep / awk,可能漏判)

跨平台 ✅ 支持 Win/Linux/macOS ✅ 但需系统有 openssl

易用性 ✅ 一键运行,输出清晰 ⚠️ 需要赋予执行权限,解析略原始

推荐程度 ⭐⭐⭐⭐⭐ ⭐⭐⭐

✅ 总结

你想要的功能 解决方案

一键检查某个域名(如 wiki.linuxchina.net)的证书链是否包含 Starfield Class 2 ✅ 提供了 Python 脚本(推荐)和 Shell 脚本 两个版本

自动获取证书链并分析 Issuer ✅ 脚本自动获取 + 关键词匹配

输出是否仍依赖 Starfield ✅ 最后给出明确结论:已移除 / 仍然存在

是否需要安装额外工具 Python 版:仅需 pyOpenSSL(pip install pyopenssl)<br>Shell 版:需要系统有 openssl 命令(一般都有)

📦 下一步

1. 推荐直接使用 Python 脚本(更精准、易读、跨平台)。
2. 将脚本中的 DOMAIN = "wiki.linuxchina.net" 替换为你想检查的任意域名。
3. 运行后,你将立刻知道:
   • 该域名是否仍然使用 Starfield Class 2

   • 证书链的构成是否安全

🔧 如你希望我帮你打包成可执行文件(如 Windows 的 .exe 或 Linux 的可运行脚本),或加入 GUI 界面、批量检查多个域名,也欢迎继续告诉我!

我可以继续帮你优化这个工具!🛠️🔒🔍
当然!以下是 中文版本 的详细说明,帮助你检查 证书链(Certificate Chain)是否已经移除 Starfield Class 2 根证书/中间证书(C2)。

🎯 问题背景

你可能想确认:

某个网站(或服务器)的 SSL/TLS 证书链,是否已经更新,不再包含 Starfield Class 2 认证机构(CA)?

换句话说,你想知道:

• 该网站当前使用的证书链中,是否 还依赖 Starfield Class 2 这个老旧的中间证书或根证书?

• 如果你 是网站管理员,如何确认并升级证书链,以 移除 Starfield Class 2?

🧩 什么是 Starfield Class 2 CA?

Starfield Class 2 Certification Authority(Starfield Class 2 CA,简称 C2) 是由 Starfield Technologies(星域科技) 提供的一个 根证书(Root CA)或中间证书(Intermediate CA),它是 GoDaddy(狗爹)旗下 的一个旧 CA。

• 过去,很多 GoDaddy 签发的 SSL 证书,会使用 Starfield 的中间证书 做为信任链的一部分。

• 但现在,GoDaddy 和大多数证书颁发机构(CA)都已经逐步淘汰 Starfield Class 2,改用更现代、更安全的根证书,比如:

  • GoDaddy R3 / R4

  • Let's Encrypt(ISRG Root X1)

  • DigiCert、Sectigo 等

✅ 你的目标

检查某个网站(比如 example.com)的 SSL 证书链中,是否还包含 Starfield Class 2 这个机构,如果包含,说明还没移除;如果不包含,说明已经升级。

🛠 方法一:使用 OpenSSL 命令行(推荐,准确)

🔧 第一步:获取网站的证书链

打开 命令提示符(Windows CMD / PowerShell)或终端(Mac / Linux),运行以下命令:
openssl s_client -showcerts -connect example.com:443


✅ 将 example.com 替换为你要检查的域名,比如 www.baidu.com、www.yourdomain.com  

❗ 在 Windows 上不需要 < /dev/null,直接运行即可,按回车后等待连接完成,然后按 Ctrl + C 停止。

这条命令会输出该网站在 TLS 握手时返回的 证书链,包括:
• 服务器证书(属于你的网站)

• 中间证书(由 CA 签发)

• (通常不包括根证书,因为根证书已经在操作系统或浏览器的信任库中)

🔍 第二步:查找 Starfield Class 2 相关信息

在输出的内容中,找到类似这样的块:

Certificate chain
 0 s:/CN=www.example.com
   i:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certs.godaddy.com/repository//CN=GoDaddy Secure Certificate Authority - G2
-----BEGIN CERTIFICATE-----
...(你的网站证书内容)
-----END CERTIFICATE-----
 1 s:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certs.godaddy.com/repository//CN=GoDaddy Secure Certificate Authority - G2
   i:/C=US/ST=Arizona/L=Scottsdale/O=Starfield Technologies, Inc./OU=Starfield Class 2 Certification Authority
-----BEGIN CERTIFICATE-----
...(中间证书,由 Starfield 签发)
-----END CERTIFICATE-----


重点查看每一块的这一行:

i: /C=US/ST=Arizona/L=Scottsdale/O=Starfield Technologies, Inc./OU=Starfield Class 2 Certification Authority


• i: 表示 Issuer(颁发者,即上一级证书是谁签发的)

• s: 表示 Subject(证书本身的身份,通常是你的域名或 CA 名称)

🔍 你要找的关键字段:

字段 值(中文解释)

O (Organization) Starfield Technologies, Inc.(星域科技公司)

OU (Organizational Unit) Starfield Class 2 Certification Authority(Starfield Class 2 认证机构)

C (Country) US(美国)

ST / L 通常是 Arizona、Scottsdale

如果 任何证书的 Issuer(i:)中包含这些字段,就说明该证书是由 Starfield Class 2 签发(或中间传递)的,也就是说 你的证书链仍然依赖 Starfield Class 2。

✅ 如果你没有看到任何类似上述信息

→ 恭喜,该网站的证书链已经不包含 Starfield Class 2,说明已经升级/移除了。

🛠 方法二:使用在线工具(无需命令行,适合小白)

如果你不想用命令行,可以使用以下 免费的在线 SSL 证书检测工具,它们会直观地展示证书链,并列出每个证书的颁发者和主题:

🔗 推荐工具:

1. https://www.ssllabs.com/ssltest/
   • 输入你要检查的域名,例如:www.example.com

   • 点击提交后,等待分析完成

   • 在 “证书” 部分,查看 证书链(Certification Paths)

   • 它会列出 每一个证书的颁发者(Issuer)和使用者(Subject)

   • 你可以一眼看出有没有 Starfield Technologies 或 Starfield Class 2

2. https://crt.sh/
   • 搜索你的域名,例如:example.com

   • 查看当前有效的证书,以及它们的 证书链

   • 可以查看每个证书的 颁发者信息

🧠 Starfield Class 2 的常见标识(用于查找)

在证书详情中,寻找如下信息:

属性 值

颁发者 (Issuer) O = Starfield Technologies, Inc., OU = Starfield Class 2 Certification Authority, C = US

国家 (C) US

组织 (O) Starfield Technologies, Inc.

组织单位 (OU) Starfield Class 2 Certification Authority

如果证书链中的 某个证书的 “颁发者” 是这个,就说明 Starfield Class 2 仍在你的证书信任链中。

🔄 如果你是网站管理员,如何移除 Starfield Class 2?

如果你 自己管理网站或服务器的 SSL 证书,想要 移除 Starfield Class 2,可以这样做:

1. 重新申请证书(推荐)

• 去你的证书提供商(如 GoDaddy、Let's Encrypt、DigiCert 等)重新申请一张新的 SSL 证书。

• 大多数主流 CA 现在 默认使用最新的中间证书,不再依赖 Starfield。

2. 检查你的服务器证书链配置

• 比如在 Nginx、Apache、IIS 中,你可能手动指定了证书和中间证书文件。

• 确保你没有手动添加旧的 Starfield 中间证书。

• 使用你的 CA(如 GoDaddy)提供的 最新中间证书链文件。

3. 不要包含根证书

• 只需提供:

  • 你的 域名证书

  • 必要的 中间证书(Intermediate CA)

• 不要包含根证书(Root CA),因为客户端(浏览器/操作系统)已经内置了信任的根证书。

✅ 总结:如何检查证书链是否已移除 Starfield Class 2

操作 方法

🔍 检查某个网站的证书链 使用:<br> • 命令行:openssl s_client -connect example.com:443 -showcerts<br> • 在线工具:https://www.ssllabs.com/ssltest/、https://crt.sh/

🔎 查找 Starfield Class 2 在证书的 Issuer(颁发者) 字段中查找:<br> O = Starfield Technologies, Inc.<br> OU = Starfield Class 2 Certification Authority<br> C = US

✅ 如果没有找到 说明证书链已经 不依赖 Starfield Class 2,已经升级/移除

❌ 如果找到 说明你的证书链 仍然使用 Starfield Class 2(建议更新)

🛠 如果你是管理员 重新申请证书,使用最新的中间证书链,不要手动添加旧 CA 证书

❓ 还需要我帮你检查某个具体的网站吗?

你可以把你想检查的 域名(比如 www.xxx.com) 发给我,我可以指导你:

• 如何解读 openssl 的输出

• 或者直接帮你分析该站点的证书链是否还包含 Starfield Class 2

如你希望,我也可以提供一个 一键检查脚本(Python 或 Shell) 来自动化这个过程!欢迎继续提问 😊🔐📘


https://docs.aws.amazon.com/AmazonS3/latest/userguide/GettingStartedS3CLI.html#GettingStartedS3CLI.step5

AWS的S3基本使用

云存储S3详解

一说就懂的 AWS S3

AWS入门实践-S3对象存储的基本用法

see also

快速入门aws


https://www.cnblogs.com/syavingcs/category/1817406.html

AWS使用教程(一)Amazon VPC

AWS探索及创建一个aws EC2实例


AWS云创建EC2与使用注意事项-踩坑记录

AWS 搭建 LVS+keepalived 步骤

Amazon EC2官方教程