更新时间:2025-06-20 gmt 08:00

常见问题-j9九游会登录

  • domain not registered或service not registered

    领域或微服务没有进行注册,请参考将微服务注册到acms自行注册领域或微服务。

  • connect timed out或read timed out

    它有两种原因,connect timed out或read timed out:

    可以在sts.properties中添加超时配置,单位为毫秒:

    sts.connect.timeout=10000 //遇到 connect timed outsts.socket.timeout=10000 //遇到 read timed out
  • encrypt permission denied

    这是因为管理台上注册微服务时,默认将微服务注册成了normal。只有角色为platform的微服务才有权限调用加密接口。

  • fail to init session key

    fail to init session key

    fail to get master key from sts

    这是因为集成了sts 1.0,也就是集成了sts-cse-sdk,从sts 1.0的服务器获取master key失败。因为sts 1.0的服务器需要业务自己去搭建,在没有搭建的情况下,当然会获取失败。

    如果已经搭建,检查业务的yaml文件中配置的environment参数和sts 1.0微服务中的environment是否一致,如果不一致则修改成一致。

  • mac check in gcm failed

    这个错误的原因就是密钥和密文不匹配导致无法解密。需要确认业务配置文件中的密文是从哪里来的?

    1. 通过iac由配置中心下发:

      检查iac代码中配置的敏感配置项id中的服务或微服务名是否属于该运行的微服务。

      • 服务级:service/{servicename}/{sensitivename}/{tag}
      • 微服务级:microservice/{servicename}/{microservicename}/{sensitivename}/{tag}
    2. 通过stsagent加密后,手工配置:

      检查加密的时候使用的服务级别servicekek还是微服务级别kek,和密文中的级别是否一致,服务名和微服务名是否和该运行的微服务一致?加密得到密文的sts环境和运行的sts环境是否一致?例如测试环境加密的密文是不能在生产环境解密。

      # 使用微服务kek加密
      # /opt/huawei/apps/wisesecurity/stsagent/stsagent encrypt -s servicename -m microservicename -x -h 10.33.102.162:8080
      # 使用服务servicekek加密
      # /opt/huawei/apps/wisesecurity/stsagent/stsagent encrypt -s servicename -m microservicename -ts servicename -x -h 10.33.102.162:8080
    3. 中间件的口令解密
      • 业务集成了cloud map对接中间件,业务不用关心口令解密的问题。
      • 业务使用sts agent加密明文口令后配置到相应管理台。参考2,看加密用的密钥和代码中解密的密钥是否对应(服务级还是微服务级kek),以及加密时使用的微服务名和服务名是否一致。
    4. 不同微服务的证书不可混用,业务使用自己微服务的证书及配置文件进行sdk的初始化,解密自己微服务的配置。
  • undefined provider local

    当创建aescryptor时,如果不用@指定keyprovider,那么它会默认调用local keyprovider。在使用kek或servicekek时,要指定keyprovider为@sts。

    //错误
    aescryptor cryptor = new aescryptor.builder().withkey("kek").withalg(cryptoalg.aes_gcm).build();
    //正确
    aescryptor cryptor = new aescryptor.builder().withkey("kek@sts").withalg(cryptoalg.aes_gcm).build();
  • 申请证书时make sure haveged is running步骤或try active service步骤报错。

    这是因为机器上没有启动haveged服务。haveged是一个随机数的熵的提供方,它可以解决在某些情况下,系统熵过低的问题。

    规避办法:在部署步骤前面加上sudo步骤;或者,到机器上,手动执行service haveged start命令,启动haveged服务。

    j9九游会登录的解决方案:在申请证书步骤前添加sudo和shell-exec步骤,确保haveged服务为启动状态。

    sudo systemctl enable haveged.service && sudo systemctl start haveged.service非euleros可以使用sudo service haveged start命令。

  • service ini config file not exists

    这是因为sts在初始化时,找不到初始化配置文件(ini文件)或者微服务名称.sts.p12证书文件不存在。该文件是在部署微服务过程中,通过stsagent申请证书时生成的,默认路径在/opt/huawei/certs/{servicename}/{microservicename},业务也可以通过相应参数来修改。

    解决办法:

    1. 首先确认配置的sts参数:
      • 通过配置文件配置的,查看sts/sts.properties文件,检查sts.config.path配置的文件是否存在。
      • 通过nuwa配置文件,检查microservice.yaml文件中nuwa.security.sts.configpath配置的文件是否存在。

        nuwa:security:sts:serverdomain: 10.33.102.109:8080configpath: /opt/huawei/certs/{servicename}/{microservicename}/{microservicename}.ini

      • 通过java bean方式配置的,也就是通过类似以下代码初始化,检查sts.config.path配置的文件是否存在。

        properties properties = new properties();properties.setproperty("sts.server.domain", "10.33.102.162:8080");properties.setproperty("sts.config.path", "d:/test/consumerservice/consumermicroservice1/consumermicroservice1.ini");stskeyapi.initwith(properties);

      • 如果配置的是相对路径,则必须是相对于resource目录的路径。如果是在idea中运行使用,则检查target下是否有该文件,如果没有则重新compiler,idea最终是从target下获取resource文件。
    2. 另外,请确认部署过程中证书申请的步骤在业务安装和启动流程之前,如果业务先启动,之后才进行证书的申请,配置文件还未生成,也会出现找不到配置文件的问题。
  • fail to derive key with master key

    这是因为sts没有初始化,就去调用了获取认证凭据的接口。

    解决办法:检查是否调用了stskeyapi.init()或stskeyapi.initwith(properties)。

  • 如何解密微服务证书的口令

    微服务证书的口令使用本地随机的根密钥和工作密钥加密,口令明文使用stskeystoreutil.getkeystorevalue()进行解密。

  • access permission denied

    微服务集成sts sdk,获取相应微服务的credentials时报如下错误reqeust sts server fail, request token form xxxx&yyyy failed, access permission denied。 这是由于provider没有该微服务配置相应的acl(access control list),导致没有权限获取访问该provider的credentials。

  • invalid api name

    sts agent执行的时候报invalid api name,这是由于 iac 中使用了sts agent高版本能力,但主机上sts agent版本过低并且iac中没有强制升级sts agent导致的。通过iac或手动更新sts agent,使用1.1.5.100及之前的部署包时请打开force_install开关。

  • 微服务有测试,镜像,海外,灰度等不同的环境,sts管理台如何管理这些敏感配置项?

    sts管理台在不同站点是分开部署。同一站点下假如想区分不同的场景,例如生产和灰度,开发,测试和镜像,则可以使用敏感配置项标签区分。

  • sts管理台敏感配置项最大长度是多少?

    5000个字符。

  • 本地缓存的sts kek,servicekek以及认证凭据是如何保护?
    • key.json由本地随机生成的rootkey和workkey加密保护,kek.json由sts kek保护。
    • 加密算法采用aes gcm。
  • 部署过程report certificate to cms报错,提示"an unknown error occurred when report certificates!"。

    首先检查/opt/huawei/certs/{service}/{microservice}下stscerttool.log中是否有错误信息。

    若日志中出现异常提示[errno -2] name or service not known,请使用以下命令确认系统版本是否为欧拉os 2.9 [euleros release 2.0 (sp9)]:

    lsb_release -a
    1. 检查主机hostname是否超过64个字符,如果是的话,修改主机名。
    2. 主机存在无法解析出主机ip的问题,参考如下步骤检查:
      1. 检查/etc/nsswitch.conf中是否包含hosts项,且对应配置包含files或myhostname。
      2. 若添加配置files,检查/etc/hosts,添加当前主机的ip映射[host_ip] [hostname],例如:10.33.100.100 host-10-33-100-100。

        若添加配置myhostname,通常无需进行其他修改。

      3. 运行以下命令检查是否有其他异常。
        hostname -i
        python -c "import socket; print(socket.gethostbyname(socket.getfqdn(socket.gethostname())))"
  • 如何手工注册微服务

    使用iac部署在wisedba上创建数据库实例,报没有注册sts的错误,如果业务还没有接入sts,可以在sts管理台进行手工注册该微服务。

  • missed = in sensitive string value / missed value in sensitive string

    解密敏感配置项的时候报missed = in sensitive string value错误,这是由于敏感配置密文格式不正确。敏感配置项密文格式如下:

    • kek加密密文格式: enc(key=kek, value=xxxx)
    • servicekek加密密文格式: enc(key=servicekek, value=xxxx)
  • unable to execute refresh credentials function

    微服务日志sts sdk抛出如下异常,这是由于对端开启了sts的微服务认证,mapconnectcoreservice&mapconnectcocreateservice未给该微服务配置acl。

    j9九游会登录的解决方案:让对端给该微服务配置acl。

    com.huawei.wisesecurity.sts.sdk.exception.stsexception: unable to execute refresh credentials function for service.identity=mapconnectcoreservice&mapconnectcocreateservice 
  • sts对jdk/jre有什么要求?

    建议使用最新的1.8版本jdk/jre。

  • invalid common name

    sts sdk抛出如下异常:

    invocationexception: code=403;msg=errorcode=1002;errormessage=invalid common name: appgallerypromotionuserservice

    这是由于cse的yaml文件中配置的微服务名和使用的sts微服务证书中的微服务名不一致导致的,使用部署时采用stsagent自动签发的证书,里面是标准的pbi服务名和微服务名。

  • sts管理台敏感配置修改后如何刷新到微服务的配置文件中?

    敏感配置项是通过配置服务发布到微服务配置文件中。在sts管理台修改后,需要在部署服务上重新发布修改的配置项。

    • 在配置中心找到该配置项
    • 重新发布该配置项:
  • fail to parser work key json file

    检查work_key.json格式是否正确,文件中的description,mac字段需要删除。

  • odd number of characters

    业务加载工作密钥文件的时候报odd number of characters异常,这是由于在sts管理台配置的hex编码的密钥明文的少或多了一个char。hex编码字符串必须是偶数个字符。

  • fail to get master key from sts

    业务集成了sts 1.0的认证能力,需要从sts 1.0 server上获取主密钥失败。sts 1.0 server是部署在业务集群中,注册到业务同一个注册中心:

    • 在相应注册中心上检查wisesecurity:securitytokenservice微服务是否存在,如果不存在,则找到相应部署机器启动该微服务。
    • 检查业务的yaml文件中配置的environment参数和sts 1.0微服务中的environment是否一致,如果不一致则修改成一致。
  • missed header x-sts-token / x-sts-session

    provider通过sts sdk认证请求时,从http消息中无法获取到相应的sts认证header信息。

    • 直接用postman访问,会缺少相应的认证凭据而失败。因此如果测试需要,可以将微服务的sts认证放通开关打开。放通开关配置在sts.properties配置文件中的sts.bypass.enable参数:true表示放通,false表示不放通,默认是不放通。
    • consumer侧开启了放通,但provider侧没有放通。
  • sts.properties文件中未配置sts.config.path指定sts微服务证书加载路径(如果是idea中执行的,检查一下target下是否存在sts.properties)。sts sdk默认加载sts/sts.properties,业务也可以通过jvm启动参数sts.properties修改该文件的路径。

    如果是通过nuwa初始化sts的,检查yaml文件中是否有配置nuwa.security.sts.configpath。

    nuwa:
       security:
         sts:
           serverdomain: 10.33.102.109:8080
           configpath: /opt/huawei/certs/{servicename}/{microservicename}/{microservicename}.ini

    如果通过java bean方式初始化,检查是否有设置sts.config.path配置项。

    properties properties = new properties();
     properties.setproperty("sts.server.domain", "10.33.102.162:8080");
     properties.setproperty("sts.config.path", "d:/test/consumerservice/consumermicroservice1/consumermicroservice1.ini");
     stskeyapi.initwith(properties);
  • sts管理台录入敏感配置项使用什么加密算法加密。

    敏感配置项采用sts给业务分配的kek/servicekek(256位)使用aes/gcm加密。

  • unable to resolve non-exist credentials

    stscseclientfilter中发送请求时报如下异常和错误,这是由于无法获取到访问该微服务凭据抛出异常。检查服务初始化sts sdk时是否有异常(查看logback或log4j中配置的com.huawei.wisesecurity.sts包路径的日志文件)。

  • invalid certificate

    回答:确认服务名和证书名是一致的,证书是重新下发的,再判断业务连接的sts server1.0上的证书是否有修改。

    注意:需要确定当前环境连接的sts服务器是正确的,可以确认性能环境所对应的注册中心,然后在这个注册中心的portal界面上查找并确认sts 1.0是哪台服务器注册上去的。

  • get sts token --timestamp out of range/timestamp is more earlier or later

    这是由于sts开启防重放攻击(和sts服务器之间时间差小于5分钟),检查业务服务器的时间是否正确。

  • configid can not be blank

    部署服务或者nuwarutime获取敏感配置项时,请求要获取的敏感配置项的列表中有值为空。

  • 管理台上服务下无法选到相应的微服务。

    在安全管理台上配置敏感配置项、证书时,服务下只显示已经在相应环境下在sts上注册过的微服务。需要让站点的业务sre在运维管理台上进行微服务注册。

  • keystoreexception: empty private key or certificate

    出现该提示,是因为主机上sts实例证书(位于/opt/huawei/certs/{服务}/{微服务}/下)并不完整,很可能是由于前一次部署过程中出错导致,请检查该证书是否有效,可使用以下命令对证书进行检查。

    /opt/huawei/apps/wisesecurity/stsagent/stsagent check -s {服务} -m {微服务} 

    如果提示校验错误信息,请重新执行stsagent-install部署步骤进行证书的重新申请。

  • unable to find secretkey version=0

    业务代码中使用sts密钥解密非sts加密的数据导致的错误。

  • micro service xxx&yyy not registered

    微服务没有在sts管理台进行注册。

  • fail to read service info from keystore

    sts sdk初始化时需要从sts的身份证书jks文件中读取服务和微服务信息,加载jks文件的时候异常了。一般是该jks文件有异常。

    sdk会根据service ini文件中的subject的cn项作为微服务名读取证书文件 {微服务名}.sts.p12

    [cert] subject = c=cn,o=huawei,ou=huawei cbg cloud microservice,cn=securitytokenservicedemoselfconsumer ip = 127.0.0.1
  • invalid timestamp

    检查业务主机的时间和标准时间差异是否超过5分钟。

  • timeout awaiting response headers

    sts-go-sdk内的responseheadertimeout参数值设置过小,目前默认为100,在初始化时传入参数“sts.responseheader.timeout”修改该值大小。

  • not an ssl/tls record

    client和server两边ssl不一致:client通过http访问,但server是提供的https的服务。

    如果是tomcat nuwa/cse,tomcat最终对外提供是http还是https是由tomcat的配置文件决定的,nuwa/cse的yaml文件中定义的只是注册到注册中心告诉对端提供的是http还是https。

  • some config items not found

    iac provider在plan阶段会去校验敏感配置项是否存在于sts管理台,如果没有录入敏感配置项,或者敏感配置项的坐标不正确,则报此错,需要业务自己检查坐标是否正确。

  • fail to get provider ** credentials

    consumer集成sts-go-sdk在获取provider端访问凭据的时候失败,需要在provider端配置acl,管理台录入acl后,需等十分钟才生效。

    启动时如果发现类似错误:

    either 'jasypt.encryptor.password', one of ['jasypt.encryptor.private-key-string', 'jasypt.encryptor.private-key-location'] for asymmetric encryption, or one of ['jasypt.encryptor.gcm-secret-key-string', 'jasypt.encryptor.gcm-secret-key-location', 'jasypt.encryptor.gcm-secret-key-password'] for aes/gcm encryption must be provided for password-based or asymmetric encryption

    那么可以按两个方向排查:

    • 检查启动类是否添加@enablestsencryptableproperties ,需要添加该注解,才能初始化stsstringencryptor对象。
    • 如果已经添加,可能是因为spring context还未初始化完成,无法获取stsstringencryptor对象。例如,eureka应用的bootstrap.yml中如果包含敏感配置项,就会报这个错,需要将敏感配置项移到其他配置文件中,即可解决。
  • unable to refresh credentials for service securitytokenservice&securitytokenmicroservice

    该问题是sts初始化的时候,从kek.json或者keys.json获取本地密钥失败,导致无法从sts-server获取凭据。

    解决方法:找到密钥的缓存地址,/${home}/.sts/服务名/微服务名/kek.json,删除kek.json和keys.json文件,重新启动即可。

相关文档

网站地图