AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 400887
Accepted
Abhijeet Rastogi
Abhijeet Rastogi
Asked: 2012-06-22 02:09:28 +0800 CST2012-06-22 02:09:28 +0800 CST 2012-06-22 02:09:28 +0800 CST

将 openvpn 中的证书列入白名单

  • 772

要撤销对客户端的访问权限,我可以这样做

$./revoke-full client_name

然后将新 crl.pem的放在服务器中。

但是,如何重新启用该客户端?删除crl.pem文件不是解决方案,因为这会破坏easy-keys目录,以后我将无法再次撤销它们。

openvpn vps arch-linux
  • 2 2 个回答
  • 1981 Views

2 个回答

  • Voted
  1. Best Answer
    mulaz
    2012-06-22T02:35:04+08:002012-06-22T02:35:04+08:00

    证书不应该被撤销!您应该生成一个新的,并将其提供给客户。

    ...但是,如果您愿意:

    在您的 CA 文件夹中,应该有一个 index.txt,其中包含证书 ID。以“V”开头的有效,以“R”开头的无效。您可以编辑该文件,并将第一个字符固定为“V”,并删除第三列(撤销日期)。如果你有不止一个证书,你应该看到模式(序列号现在出现在第三列,等等)。

    然后你只需要再次重新生成 CRL,它应该可以工作。

    这是一个丑陋的 hack,...我仍然建议为客户端生成一个新证书。

    • 4
  2. F. Hauri - Give Up GitHub
    2013-03-21T03:37:18+08:002013-03-21T03:37:18+08:00

    虽然撤销切换根本不是一个很好的做法,但在某些特殊情况下取消撤销密钥(如undo)可能很有用。

    最差:永远不能删除crt,除非是非常具体的情况,比如学习。最后,您可能会看到我如何删除最后一个索引条目(作为撤消操作)。

    撤销

    我写了一个小unrevoke脚本。

    由于这不是标准功能,我添加了一种名为 的日志文件,unrevoke.txt采用 ASCII 格式并重新使用index.txt的结构(制表符分隔):

    U | Revocation date | Unrevocation date | Id | unknown | Subject
    

    警告:它可以满足我的需要,但您必须在正常使用前对其进行测试!

    #!/bin/bash
    
    # un-revoke a certificate, regenerate CRL,
    # and verify revocation status
    
    CRL=crl.pem
    
    if test $# -ne 1; then
        echo "usage: unrevoke <name|idx>";
        exit 1
    fi
    
    if test $KEY_DIR; then
        cd $KEY_DIR
        read issuer < <(openssl x509 -issuer -noout -in $KEY_DIR/ca.crt)
        issuer=${issuer#*CN=}
        issuer=${issuer%%/*}
        export KEY_CN=$issuer KEY_OU=$issuer KEY_NAME=$issuer
    
        if [ -f $1.crt ] ;then
            NAM=$1
        REV=($(sed -ne <index.txt "s/^R\t[^\t]*\t\([0-9]\+Z\)\t\([0-9A-F]\{2,8\}\)\tunknown\t\(.*CN=$1\/.*\)$/\1 \2 \3/p"))
            IDX=${REV[1]}
            SUB="${REV[@]:2}"
        else
            if [ -f $1.pem ] ;then
                IDX=$1
                REV=($(sed -ne <index.txt "s/^R\t[^\t]*\t\([0-9]\+Z\)\t$1\tunknown\t\(.*CN=\([^\/]\+\)\/.*\)$/\1 \3 \2/p"))
                NAM=${REV[1]}
                SUB="${REV[@]:2}"
            fi
        fi
        CRT=$IDX.pem
        if [ -f $CRT ] && [ "$NAM" ] && [ "$IDX" ] ;then
            printf "Key idx: %s, name: %s\n" $IDX $NAM
        else
            echo Key $1 not found.
            exit 1
        fi
    
        DTE=$(date +"%y%m%d%H%M%SZ")
        # unrevoke key
        sed -e "s/^R\t\([0-9]\+Z\)\t[0-9]\+Z\t$IDX\t/V\t\1\t\t$IDX\t/" -i.old index.txt &&
            printf "U\t%s\t%s\t%s\tunknown\t%s\n" $REV $DTE $IDX "$SUB" >>unrevoke.txt
    
        # generate a new CRL
        openssl ca -gencrl -out $CRL -config $KEY_CONFIG
    
        # verify the revocation
        openssl verify -CAfile <(cat ca.crt $CRL) -crl_check $CRT
    else
        echo you must define KEY_DIR
    fi
    

    最后删除

    仅供参考!!: 密钥永远不会被删除以允许他撤销!

    #!/bin/bash
    # For info only!!
    # key as to NEVER be deleted
    # for making a correct revocation liste
    #
    # Don't use it unless you're sure you know what you're doing!!!
    
    cd $KEY_DIR || exit 1
    
    mapfile index <index.txt
    OIFS="$IFS"
    IFS=$'\t'
    line=(${index[${#index[@]}-1]})
    IFS="$OIFS"
    if [ "$line" == "V" ] ;then
        idx=${line[2]}
        nam=${line[4]#*CN=}
    else
        idx=${line[3]}
        nam=${line[5]#*CN=}
    fi
    nam=${nam%%/*}
    rm -v $nam.* $idx.*
    unset index[${#index[@]}-1]
    cat index.txt >index.txt.old 
    printf "%s" "${index[@]}" >index.txt
    cat serial >serial.old 
    echo ${line[2]} >serial
    
    • 0

相关问题

  • OpenVPN:在哪里生成私钥?

  • 将 iPhone 连接到 OpenVPN

  • OpenVPN 的 Linux IP 转发 - 正确的防火墙设置?

  • 最好的点对点 VPN?

  • 通过 VPN 使您的打印机可用的最佳方法是什么?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve