V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
vfx666
V2EX  ›  SSL

能否低价申请到 10 年有效期的证书?

  •  
  •   vfx666 · 8 天前 via iPhone · 1849 次点击
    自己写的程序需要做证书固定( SSL pin )防止中间人攻击,但是一般证书有效期就一年,过期后,客户端还要再更新就很麻烦……
    23 条回复    2024-06-30 00:01:11 +08:00
    bearice
        1
    bearice  
       8 天前
    你都 pin 证书了,那就自签一个呗,想签多久签多久。
    Xinu
        2
    Xinu  
       8 天前
    这肯定推荐自签证书,我都是签 20 年
    tool2dx
        3
    tool2dx  
       8 天前
    标准 SSL pin 不太好用,安卓上有工具可以 remove the Certificate Pinning ,会修改一些 okhttp3 函数调用。

    最好自己维护一个证书白名单列表。
    vfx666
        4
    vfx666  
    OP
       8 天前 via iPhone
    @Xinu 但是这样的话客户端需要手动导入自签证书吧?
    NewYear
        5
    NewYear  
       8 天前
    SSL 最长就是 13 个月,,,长了浏览器也不信任。你买多年的它也只会给你发一年的。
    retanoj
        6
    retanoj  
       8 天前
    参考一下这个
    https://shunix.com/ssl-pinning/

    其中 PIN 证书 和 PIN 公钥的部分
    yinmin
        7
    yinmin  
       7 天前 via iPhone
    用证书的 pubkey 做 pin 字段,之后用原来的 csr 申请新证书,pubkey 不会变化的。

    你也可以事先多做几个 csr ,然后自签名取到 pubkey ,然后都 ssl pin 到软件里,将来万一密钥 key 文件泄漏,换一个 csr 申请。
    Xinu
        8
    Xinu  
       7 天前
    @vfx666 你的是 web 服务? 如果是 web 服务你只能买受信任的证书,而且最多 300 多天
    mxT52CRuqR6o5
        9
    mxT52CRuqR6o5  
       7 天前 via Android
    做 ssl pin 无论如何都得存点什么才能叫 ssl pin 吧,你用系统根证书列表验证书不叫 ssl pin
    vfx666
        10
    vfx666  
    OP
       7 天前 via iPhone
    @Xinu 我是 c++写的客户端,用 winhttp ,自签证书能搞吗?是不是要在程序里忽略证书安全性
    vfx666
        11
    vfx666  
    OP
       7 天前 via iPhone
    @yinmin 请问在哪里可以这样申请证书?腾讯阿里貌似都不行
    Xinu
        12
    Xinu  
       7 天前
    @vfx666 能的,可以做自签证书,你的服务端用自签证书开启 tls 传输,客户端通信的时候也要携带自签证书相关的内容。双向验证证书
    Xinu
        13
    Xinu  
       7 天前
    @vfx666
    https://www.yuque.com/xinu/notes/nigl89

    自签证书用 openssl 工具,自己就能申请,也有在线申请的网站
    vfx666
        14
    vfx666  
    OP
       7 天前 via iPhone
    @Xinu 客户端代码里不需要忽略证书安全性吗?自签证书不是会拒绝连接吗
    yinmin
        15
    yinmin  
       7 天前 via iPhone
    @vfx666 #11 openssl 生成 key 和 csr 文件,在服务商申请证书时选择提交 csr 方式
    ho121
        16
    ho121  
       7 天前 via Android
    @vfx666 客户端默认拒绝非信任的证书是为了防止有人使用使用野生证书做中间人攻击。而你都做 pin
    ho121
        17
    ho121  
       7 天前 via Android
    @vfx666 客户端默认拒绝非信任的证书是为了防止有人使用野生证书做中间人攻击。而你都做 ssl pin 了,就不存在野生证书的问题了,直接接受自己的证书就行了
    vfx666
        18
    vfx666  
    OP
       7 天前 via iPhone
    @ho121 但是这样的话还是得在客户端代码里设置忽略证书错误,不然 winhttp 默认是拒绝连接的吧
    liuw666
        19
    liuw666  
       7 天前 via iPhone
    客户端代码里可以设置信任自签证书的
    liuw666
        20
    liuw666  
       7 天前 via iPhone
    不需要忽略证书错误,只信任你自己的那个就行
    Xinu
        21
    Xinu  
       7 天前
    @vfx666 我用的是 nodejs 和 go 都是可以设置信任自己的证书,大概率 winhttp 也可以设置信任自己的证书
    arrow629
        22
    arrow629  
       5 天前
    @vfx666 你就忽略错误,WinHTTP 不是有办法拿到证书的上下文吗 https://learn.microsoft.com/en-us/windows/win32/winhttp/ssl-in-winhttp#:~:text=When%20using%20the,WINHTTP_OPTION_SERVER_CERT_CONTEXT%20flag%20instead. 拿到 CERT_CONTEXT structure 后,你用 openssl 解析判断是不是你的证书就行
    arrow629
        23
    arrow629  
       5 天前
    @liuw666 WinHTTP 好像必须要忽略证书错误才能用自签证书,不过 WinHTTP 可以拿到建立 TLS 连接时服务器的证书,可以在代码里判断就是了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4959 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 07:45 · PVG 15:45 · LAX 00:45 · JFK 03:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.