V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
9xrtp7r1
V2EX  ›  问与答

请问我在 startSSL 申请的免费证书,能用来制作双向认证的证书吗?

  •  
  •   9xrtp7r1 · 2015-03-24 10:38:17 +08:00 · 4970 次点击
    这是一个创建于 3565 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我在startSSL申请了一个免费数字证书,已经部署成功,可以让网站正常访问了

    因为这个网站是内部的系统,不希望外部的人访问到

    所以我想用 双向认证, 但是我不会弄

    网上的教程都是教 要自己做ca,可是 这样的话 浏览器就不认识了,需要把自己的ca加入信任,但我怕ca被盗,会给我们的用户带来麻烦

    所以请问大家,这个start申请来的ssl证书可以制作双向认证吗?

    或者 你有其他更好的办法来实现,限制外部人员的访问吗

    网站的入口就是一个登陆页面。所以才不希望任何没有授权的人访问

    谢谢大家

    29 条回复    2015-03-26 03:55:23 +08:00
    xenme
        1
    xenme  
       2015-03-24 11:03:55 +08:00
    免费的不行,你需要的是中级证书。
    http://www.startssl.com/?app=5
    sarices
        2
    sarices  
       2015-03-24 11:48:14 +08:00
    搭个话,问问
    自签证书可不可以做双向?
    双向证书是不是有证书的客户端才能访问?
    客户的证书是不是所有客户都用同一个?
    谢谢
    wzxjohn
        3
    wzxjohn  
       2015-03-24 12:01:46 +08:00
    @sarices 自签可以双向,只是系统默认不信任而已。
    publicID001
        4
    publicID001  
       2015-03-24 12:33:25 +08:00 via Android
    可以 让你的所有客户申请一个Startcom的email证书,客户用你网站的证书验证你的身份,你用客户的email证书验证客户身份
    julyclyde
        5
    julyclyde  
       2015-03-24 13:37:04 +08:00
    可以双向。要求客户端出示 指定CA签发的 证书
    NewYear
        6
    NewYear  
       2015-03-24 16:54:37 +08:00
    我以前也想过这个问题,双向认证真的算是一个很赞的方案。

    关注。
    9xrtp7r1
        7
    9xrtp7r1  
    OP
       2015-03-24 17:05:33 +08:00
    @xenme 谢谢您,我看页面好像写2美元一个, 我目前用的免费证书,如果用这个中级的证书需要多少钱,一个客户端给2美元就可以了吗。这个证书本身需要多少钱呢 [我英语不太好] 找了半天 也没有找到入口
    9xrtp7r1
        8
    9xrtp7r1  
    OP
       2015-03-24 17:07:07 +08:00
    @sarices 自己搭建 浏览器会提示 危险,但你可以把自建的加入浏览器的信任里面 就不提醒了 ,但是如果你的ca根证书被盗,那可能就会带来很可怕的风险
    9xrtp7r1
        9
    9xrtp7r1  
    OP
       2015-03-24 17:07:44 +08:00
    @publicID001 哦哦 那需要钱吗 有教程吗, 用什么关键词去搜索这方面的教程呢 谢谢您
    9xrtp7r1
        10
    9xrtp7r1  
    OP
       2015-03-24 17:07:51 +08:00
    @julyclyde 谢谢
    ooxxcc
        11
    ooxxcc  
       2015-03-24 17:21:44 +08:00
    可以双向认证

    startssl的证书用来客户认证服务器,服务器认证客户可以用另一套ca/证书组合
    9xrtp7r1
        12
    9xrtp7r1  
    OP
       2015-03-24 17:24:16 +08:00
    @ooxxcc 谢谢 请问如何设置呢,有对应教程吗 或者我应该用什么关键词去搜对应的教程呢 谢谢您
    vibbow
        13
    vibbow  
       2015-03-24 17:31:14 +08:00
    ooxxcc
        14
    ooxxcc  
       2015-03-24 17:32:44 +08:00
    @9xrtp7r1 你用的什么服务端?

    nginx的话,大概这样的

    ssl_certificate <startssl cert>
    ssl_certificate_key <private key>

    ssl_client_certificate <self-signed ca cert>
    ssl_verify_client on

    搜一下有很多教程
    imnpc
        15
    imnpc  
       2015-03-24 17:38:39 +08:00
    好像需要将证书转换为pfx?然后双向认证
    publicID001
        16
    publicID001  
       2015-03-24 17:54:24 +08:00 via Android
    @9xrtp7r1 不要,就和你登录startssl的证书一样,也给客户申请这种证书就行。

    关键词类似apache/php证书认证 等 13楼也提到了。

    另外楼上说的中级根不是大企业基本不用想了,不是一般的贵和麻烦,而且这是为了自己签发用的,你这个让客户直接找startssl就好。
    9xrtp7r1
        17
    9xrtp7r1  
    OP
       2015-03-24 17:54:26 +08:00
    @vibbow


    谢谢 我用的 nginx ,目前网站是ssl访问的,用的是startssl的免费证书,但我不知道如何弄成双向认证,以前我用自己签发ca 签发客户端 ,服务器证书的方式实现过双向认证;但它显示不信任,所以我想用 系统信任的证书机构的证书来实现 双向认证
    9xrtp7r1
        18
    9xrtp7r1  
    OP
       2015-03-24 17:55:11 +08:00
    @ooxxcc 谢谢 我用的 nginx ,目前网站是ssl访问的,用的是startssl的免费证书,但我不知道如何弄成双向认证,以前我用自己签发ca 签发客户端 ,服务器证书的方式实现过双向认证;但它显示不信任,所以我想用 系统信任的证书机构的证书来实现 双向认证
    9xrtp7r1
        19
    9xrtp7r1  
    OP
       2015-03-24 17:59:09 +08:00
    @publicID001 谢谢您的再次回复, 目前用我们网站的客户数量就6个左右,不多,并且以后也不会很多的,因为是内部用, 您的意思是 我去startssl给每个客户申请一个证书吗, 如果我给每个客户申请了证书,如果再服务器上 验证他们的身份呢,我用的 nginx , 我想应该要让nginx获取客户提交的证书的某些信息,如果符合就放行,否则就拦截, 我不太了解如何在nginx上设置鉴权,您是否有办法呢
    yangff
        20
    yangff  
       2015-03-24 18:13:15 +08:00 via Android
    。。你自签一个root ca,然后把双向验证的证书弄好,把root ca的key删掉,把造root ca的服务器砸了烧掉,问题解决。
    ooxxcc
        21
    ooxxcc  
       2015-03-24 18:21:17 +08:00
    @9xrtp7r1 按我14楼给的配置就好,或者参照你原本的配置,只要把 ssl_certificate 改成startssl签发的证书就好,ssl_certificate_key改为配套的私钥,其他不用动
    9xrtp7r1
        22
    9xrtp7r1  
    OP
       2015-03-24 18:38:14 +08:00
    @ooxxcc 谢谢 我试试 ,那这样 会不会 其他人 申请一个 startssl的证书 也能访问我的网站呀
    vibbow
        23
    vibbow  
       2015-03-24 18:45:41 +08:00
    @9xrtp7r1 所以需要你在应用层,或者apache/nginx那里检查客户端证书
    9xrtp7r1
        24
    9xrtp7r1  
    OP
       2015-03-24 18:49:57 +08:00
    @vibbow 哦哦 我就是想让nginx帮我检查证书,如果正确,就让通过, 否则就什么都不返回,



    我设想的, 给客户的证书,他们的邮箱都是 公司域名邮箱, @后面的后缀是 公司的域名, 如果写代码判断,只要获取客户证书里面的邮箱 判断是不是 公司的域名,就可以完成验证,.

    但我不知道 如何在nginx里面做这个判断逻辑, 也不知道如何获取客户证书的信息
    vibbow
        25
    vibbow  
       2015-03-24 18:58:35 +08:00
    @9xrtp7r1 如果是你给客户证书,那么八成是你自签名的证书了。
    那你第一步要做的是按照我前面博客上的教程,把你自签名证书的CA添加到系统证书库里。

    然后我在Apache里是这样认证的,不确定Nginx里怎么写:

    <VirtualHost *:443>
    ..............

    SSLEngine on
    Header add Strict-Transport-Security: "max-age=15768000"

    SSLVerifyClient require
    SSLVerifyDepth 10
    SSLOptions +StdEnvVars

    <Location />
    SSLRequire %{SSL_CLIENT_I_DN_O} eq "WoSign CA Limited" \
    and %{SSL_CLIENT_S_DN_Email} eq "[email protected]"
    </Location>
    </VirtualHost>

    这样Apache就会进行双向认证,同时检查客户端SSL证书必须是WoSign颁发给我这个邮箱的。
    ooxxcc
        26
    ooxxcc  
       2015-03-24 19:02:45 +08:00
    @9xrtp7r1 你还是没弄懂,服务端认证客户端用的是你自己签发的CA。。。。就不是startssl那套了
    9xrtp7r1
        27
    9xrtp7r1  
    OP
       2015-03-24 19:29:30 +08:00
    @ooxxcc 哦哦 如此的话,那我和服务器连接的时候用的是startssl的证书吗,如果自己签发的话,那浏览器上面就不会显示绿色的哦 就会说没有信任
    SharkIng
        28
    SharkIng  
       2015-03-25 07:41:55 +08:00
    @9xrtp7r1 oxxcc说的是,你浏览器验证,就是客户在访问你网站的时候,你是使用的是StartSSL的证书,然后需要认证 的时候,你使用的是你自己的CA证书,这两个是互不影响的
    9xrtp7r1
        29
    9xrtp7r1  
    OP
       2015-03-26 03:55:23 +08:00
    @SharkIng 非常感谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3146 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 13:26 · PVG 21:26 · LAX 05:26 · JFK 08:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.