通过 BouncyCastle 进行 CSR 签名生成的证书被视为不受信任

2023-12-02

我正在努力解决以下问题:

我有一个 CSR,我使用此代码签署:

@Override
public X509Certificate signCSR( Reader pemcsr, int validityDays ) throws APIException
{
try ( PEMParser reader = new PEMParser( pemcsr ) )
{

  KeyStore keystore = getKeyStore();

  Properties cryptoProps = getCryptoProperties();

  String caKeyAlias = cryptoProps.getProperty( PROPERTY_KEYSTORE_CA_CERT_ALIAS );
  String caKeyPassword = cryptoProps.getProperty( PROPERTY_KEYSTORE_CA_CERT_PASSWORD );

  PrivateKey cakey = (PrivateKey) keystore.getKey( caKeyAlias, caKeyPassword.toCharArray() );
  X509Certificate cacert = (X509Certificate) keystore.getCertificate( caKeyAlias );

  PKCS10CertificationRequest csr = (PKCS10CertificationRequest) reader.readObject();

  AlgorithmIdentifier sigAlgId = new DefaultSignatureAlgorithmIdentifierFinder().find( "SHA1withRSA" );
  AlgorithmIdentifier digAlgId = new DefaultDigestAlgorithmIdentifierFinder().find( sigAlgId );
  X500Name issuer = new X500Name( cacert.getSubjectX500Principal().getName() );
  BigInteger serial = new BigInteger( 32, new SecureRandom() );
  Date from = new Date();
  Date to = new Date( System.currentTimeMillis() + ( validityDays * 86400000L ) );

  DigestCalculator digCalc = new BcDigestCalculatorProvider().get( new AlgorithmIdentifier( OIWObjectIdentifiers.idSHA1 ) );
  X509ExtensionUtils x509ExtensionUtils = new X509ExtensionUtils( digCalc );

  X509v3CertificateBuilder certgen = new X509v3CertificateBuilder( issuer, serial, from, to, csr.getSubject(), csr.getSubjectPublicKeyInfo() );

  // Basic Constraints
  // certgen.addExtension( Extension.basicConstraints, true, new
  // BasicConstraints( 0 ) );

  // Subject Key Identifier
  // certgen.addExtension( Extension.subjectKeyIdentifier, false,
  // x509ExtensionUtils.createSubjectKeyIdentifier(
  // csr.getSubjectPublicKeyInfo() ) );

  // Authority Key Identifier
  // byte[] caKeyEncoded = cacert.getPublicKey().getEncoded();
  // SubjectPublicKeyInfo caSubjectPublicKeyInfo =
  // SubjectPublicKeyInfo.getInstance( caKeyEncoded );
  // certgen.addExtension( Extension.authorityKeyIdentifier, false,
  // x509ExtensionUtils.createAuthorityKeyIdentifier( caSubjectPublicKeyInfo
  // ) );

  // Key Usage
  // certgen.addExtension( Extension.keyUsage, false, new KeyUsage(
  // KeyUsage.digitalSignature | KeyUsage.keyCertSign | KeyUsage.cRLSign )
  // );

  ContentSigner signer = new BcRSAContentSignerBuilder( sigAlgId, digAlgId ).build( PrivateKeyFactory.createKey( cakey.getEncoded() ) );

  // ContentSigner signer = new JcaContentSignerBuilder(
  // "SHA1WithRSAEncryption" ).setProvider( "BC" ).build( cakey );

  X509CertificateHolder holder = certgen.build( signer );

  return new JcaX509CertificateConverter().setProvider( "BC" ).getCertificate( holder );
}
catch ( NoSuchAlgorithmException | KeyStoreException | CertificateException | OperatorCreationException | UnrecoverableKeyException | CertIOException e )
{
  throw new APIException( API_ERROR_CODE.CRYPTOGRAPHY_ERROR, e );
}
catch ( IOException e )
{
  throw new APIException( API_ERROR_CODE.IO_ERROR, e );
}

}

至此顺利通过。但是,当我尝试使用以下命令检查密钥时:

KeyStore ks = getKeyStore();

  TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance( TrustManagerFactory.getDefaultAlgorithm() );
  trustManagerFactory.init( ks );

  for ( TrustManager trustManager : trustManagerFactory.getTrustManagers() )
  {
    if ( trustManager instanceof X509TrustManager )
    {
      X509TrustManager x509TrustManager = (X509TrustManager) trustManager;
      x509TrustManager.checkClientTrusted( new X509Certificate[] { certificate }, "RSA" );
    }
  }

...它失败并出现CertificateException。请注意,我在这里使用的是非常相同的密钥库,这意味着我正在签名的 CA 密钥包含在其中。为什么会出现这种情况?

顺便说一句,奇怪的是,当我使用 Windows 的证书查看器打开生成的签名证书时,它确实显示了颁发 CA 名称,但其条目并未显示在证书链中。看起来好像 CA 根证书不存在于 Windows 受信任的权威列表中,但实际上它也存在。

更奇怪的是:如果我使用 OpenSSL 签署 CSR,证书链看起来没问题。我还认为通过 PKCS12 作为中间格式将 CA 密钥对从 OpenSSL 导入到 Java 密钥库的过程并不成功,但实际上如果我从 Java 密钥库导出 CA 证书并使用 Windows 证书打开它查看器,它显示为可信...

UPDATE:对于熟悉 ASN.1 的人来说,这里有两个编码证书。一种是用 BouncyCastle 制作的,不受信任,另一种是由与 OpenSSL 相同的 CA 密钥签名的,并且是受信任的。可以使用如下工具对其进行解码:ASN.1解码器如果有人可以查看这些解码数据并告诉我什么可能导致它们之间的差异,我将非常感激。

这个不可信:

-----BEGIN CERTIFICATE-----
MIIC6TCCAlKgAwIBAgIESdsI/TANBgkqhkiG9w0BAQUFADCBgzEgMB4GCSqGSIb3
DQEJARYRdGVzdGNhQHRlc3RjYS5jb20xEDAOBgNVBAMMB1Rlc3QgQ0ExEDAOBgNV
BAsMB1Rlc3QgQ0ExEDAOBgNVBAoMB1Rlc3QgQ0ExDTALBgNVBAcMBFdpZW4xDTAL
BgNVBAgMBFdpZW4xCzAJBgNVBAYTAkFUMB4XDTE0MDUxOTExNTYwM1oXDTE1MDUx
OTExNTYwM1owajELMAkGA1UEBhMCVUsxCzAJBgNVBAgTAlBiMQswCQYDVQQHEwJC
cDETMBEGA1UEChMKZmdmZ2ZnZGZnZDEPMA0GA1UECxMGYWJjZGVmMRswGQYDVQQD
DBJwZXRlcnZlbG9zeV90aWdyaXMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
AoIBAQCdL7taENsONBazc2iMDV5nw9ACP5mevmnzPwOJRUcd5GlGgry/iSa3tTwL
l6Um3zNc4X0m5nVVskKeJE4dTvYFV3+vJlEKCra86yQfa6XkGllU4EG6SdG8lRhE
Btk1QbOQZKrUz77IdOWWOUvIsNxtDDQcUhnrSjSxHohdoe/yoCl+60RBdjrgUrRo
uctSHFPvVt2uZaVM2rAVovx56vvJHOag2++rcvXaOh9WHvdwRAIZt/4aOv2O4jdI
jKdRrmF8dOudjR89wIeVjX9fvyvx+hw+ZolUio9GOVKLlBcYno6lEupHLUDK9ECs
W8F6y65nYGlm9/0G0+gB7K1yy1dBAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAKJpM
7AbkWBH3ho1YV0d1glJvefQ1xaXGpDfd+Tzf3+cR1o3+YxxEyuYvBbiQ/MBxKD9/
hsFCqEWzOfu2lAZ+/6uHvt7BCEGhaLdWKXehoaIw/kEMeISIUDFbKORCsKJNbYRB
xgqBXGglTQ4gVXMDRBxzOmButN31j1VDt55gvn4=
-----END CERTIFICATE-----

这是受信任的,它是使用理论上相同的 CA 证书但通过 OpenSSL 生成的:

-----BEGIN CERTIFICATE-----
MIIC+TCCAmICAhI4MA0GCSqGSIb3DQEBBQUAMIGDMQswCQYDVQQGEwJBVDENMAsG
A1UECAwEV2llbjENMAsGA1UEBwwEV2llbjEQMA4GA1UECgwHVGVzdCBDQTEQMA4G
A1UECwwHVGVzdCBDQTEQMA4GA1UEAwwHVGVzdCBDQTEgMB4GCSqGSIb3DQEJARYR
dGVzdGNhQHRlc3RjYS5jb20wHhcNMTQwNTE0MTkzMTAzWhcNMTUwNTA5MTkzMTAz
WjCBgDELMAkGA1UEBhMCSFUxETAPBgNVBAgTCEJ1ZGFwZXN0MREwDwYDVQQHEwhC
dWRhcGVzdDEWMBQGA1UEChMNTWVyY2hhbnQgVGVzdDEWMBQGA1UECxMNTWVyY2hh
bnQgVGVzdDEbMBkGA1UEAwwScGV0ZXJ2ZWxvc3lfdGlncmlzMIIBIjANBgkqhkiG
9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1vuY4MQ5b9Jb0MiyEuCrR4E+7VgmrvEwlswO
aMIF4H6i538PwPml5dbqx/3whxR/BcQJuJYWI/Hh7xxGS7FvSQ+DNhzxv9TpECKS
/5OZNm+JikPZwTiwrS/Cf4NP+ZcXOjtVZp6ngVtTarn3NC/J7gJVYaHVVO4NbUkt
kCYhdfCXg71QiJ42RWMjMC9tJFrrlfem+SVzh8yMtUCBKm7nbMjQ6LngawjTzDK8
2Zcdqwdzvt2pcYcsYSViO5j5t/r7rIDGjRkjJqRSEiJMOvn0W+sdTdmFoZbyj7Qe
pgyCyf28uFyCO9QZro337D8klPLXaWJOwPDXXiuYOTDYAjBVbwIDAQABMA0GCSqG
SIb3DQEBBQUAA4GBAGU60GVjR+2oEiJMSe1CKU7gf+bGuxaCxXQTzVQLU652i1sp
Fv56o6jnLtw46/rQydNKX4GBH022B/BDEPAQQiQv31YKQAoWtBZod0SRonogcx7p
AULacoma9QEgHSX0l+2yEn42/qo7o0pAmmewJlsCnHVIqI0eU8x1XbCEAf53
-----END CERTIFICATE-----

更新2:

感谢 Bruno 的回答,证书链现在看起来正常,并生成了以下证书:

-----BEGIN CERTIFICATE-----
MIIC6TCCAlKgAwIBAgIEI2vbpTANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMC
QVQxDTALBgNVBAgMBFdpZW4xDTALBgNVBAcMBFdpZW4xEDAOBgNVBAoMB1Rlc3Qg
Q0ExEDAOBgNVBAsMB1Rlc3QgQ0ExEDAOBgNVBAMMB1Rlc3QgQ0ExIDAeBgkqhkiG
9w0BCQEWEXRlc3RjYUB0ZXN0Y2EuY29tMB4XDTE0MDUyMDA3MzkyMFoXDTE1MDUy
MDA3MzkyMFowajELMAkGA1UEBhMCVUsxCzAJBgNVBAgTAlBiMQswCQYDVQQHEwJC
cDETMBEGA1UEChMKZmdmZ2ZnZGZnZDEPMA0GA1UECxMGYWJjZGVmMRswGQYDVQQD
DBJwZXRlcnZlbG9zeV90aWdyaXMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
AoIBAQCdL7taENsONBazc2iMDV5nw9ACP5mevmnzPwOJRUcd5GlGgry/iSa3tTwL
l6Um3zNc4X0m5nVVskKeJE4dTvYFV3+vJlEKCra86yQfa6XkGllU4EG6SdG8lRhE
Btk1QbOQZKrUz77IdOWWOUvIsNxtDDQcUhnrSjSxHohdoe/yoCl+60RBdjrgUrRo
uctSHFPvVt2uZaVM2rAVovx56vvJHOag2++rcvXaOh9WHvdwRAIZt/4aOv2O4jdI
jKdRrmF8dOudjR89wIeVjX9fvyvx+hw+ZolUio9GOVKLlBcYno6lEupHLUDK9ECs
W8F6y65nYGlm9/0G0+gB7K1yy1dBAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAIdFF
h6uLY7ioKQ3O0c4cZHHjRA0HTlWjih8P2xvXY/V9jF914BT7OW52UJ16tQaJlOf+
mAeeBDq9srKnkmOQp3mCejVnkyVZF8pOOzNbqSVzylt0Csg2twnxZ0NcM63Oda5b
YSQI8+arryxykLWkHWH8i/6rPCDCtbAHBo7fSeQ=
-----END CERTIFICATE-----

然而,上面的 TrustManager 代码拒绝了它。如果我绕过 TrustManager 并执行以下操作:

 KeyStore ks = getKeyStore();

  Enumeration<String> aliases = ks.aliases();

  while ( aliases.hasMoreElements() )
  {
    String alias = aliases.nextElement();
    Certificate currentCert = ks.getCertificate( alias );
    try
    {
      certificate.verify( currentCert.getPublicKey() );
      return true;
    }
    catch ( Exception e )
    {
      // the certificate cannot be verified with this key.
    }
  }

  return false;

...它过去了。有谁知道为什么 TrustManager 检查失败?

附注CA 证书如下所示:

-----BEGIN CERTIFICATE-----
MIICfzCCAegCCQCU+Ah6M5qQGTANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMC
QVQxDTALBgNVBAgMBFdpZW4xDTALBgNVBAcMBFdpZW4xEDAOBgNVBAoMB1Rlc3Qg
Q0ExEDAOBgNVBAsMB1Rlc3QgQ0ExEDAOBgNVBAMMB1Rlc3QgQ0ExIDAeBgkqhkiG
9w0BCQEWEXRlc3RjYUB0ZXN0Y2EuY29tMB4XDTE0MDQyMzA3MjYzNFoXDTI0MDQy
MDA3MjYzNFowgYMxCzAJBgNVBAYTAkFUMQ0wCwYDVQQIDARXaWVuMQ0wCwYDVQQH
DARXaWVuMRAwDgYDVQQKDAdUZXN0IENBMRAwDgYDVQQLDAdUZXN0IENBMRAwDgYD
VQQDDAdUZXN0IENBMSAwHgYJKoZIhvcNAQkBFhF0ZXN0Y2FAdGVzdGNhLmNvbTCB
nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAldKTo8iqF52dsOwln0Oppu+ODiaG
R4T7Znrca4Cs5FBQOmuMwqUP6ilW115p/WvkBHhm8dZyVACPKdshEfhh4VFAW5r2
mJnosYgjafQpTEv83sc938DwtK6iikZ0uvdBJKG/IuYblNq9TPMLFeTYjD8mgf9j
m6JOvA/Q9J4nRW0CAwEAATANBgkqhkiG9w0BAQUFAAOBgQB8ACYeC+zjV/KqxPr1
cyzfJP9xfUnxDTEKUJS2YVuxJqpfbHeUtvKoN89BfY07XWdnj8cgMDfJp10Kdc2A
clwP2lVDtOgHZS07UUW98q9FKQ33mLHIn0nDKNwTo5VH8t/NJVeMFuZPAbFiI2gj
KH2sTU2GNNvKC4jHh0PS+OZFtg==
-----END CERTIFICATE-----

如果您查看两个证书中的颁发者 DN,它们不匹配(输出来自openssl x509 -text):

Issuer: C=AT, ST=Wien, L=Wien, O=Test CA, OU=Test CA, CN=Test CA/[email protected]

and

Issuer: [email protected], CN=Test CA, OU=Test CA, O=Test CA, L=Wien, ST=Wien, C=AT

因此,它无法将错误的颁发者与 CA 的主题 DN 进行匹配。

很遗憾,X500Name issuer = new X500Name(cacert.getSubjectX500Principal().getName())没有达到您的预期。 RDN 的顺序相反。通常,从字符串表示形式重建 DN 可能会失败,因为将 ASN.1 表示形式序列化为字符串的方法有多种。爪哇的X500Principal有多种格式可供使用getName(...)它甚至提供了一种向字符串映射提供您自己的 OID 的方法(对于更晦涩的 OID)。道路emailAddress分隔也可能导致问题(注意它用逗号或斜杠分隔的方式)。

相反,从编码形式构建 X500Name,这应该始终有效:

X500Name x500Name = X500Name.getInstance(cert
                        .getSubjectX500Principal().getEncoded());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 BouncyCastle 进行 CSR 签名生成的证书被视为不受信任 的相关文章

  • Android Studio 0.8.2 URI 有一个权限组件

    我收到 Gradle 项目同步失败 消息 当我启动 Android Studio 时 当我尝试清理项目时 我收到 无法完成 Gradle 执行原因 URI 具有权限组件 我已经尝试了几件事 但仍然陷入困境 我将配置文件从用户文件夹中移出 并
  • 为什么java中的BigInteger被设计成不可变的?

    在 java 中 BigInteger 是不可变的 但我想了解为什么 因为很多时候它用于进行大量计算 从而产生大量对象 所以 不让它变得不可变感觉有点直观 我想到的情况类似于字符串操作 然后是 StringBuilder 的选项 是否应该有
  • Webdriver 和 Chrome:DevToolsActivePort 文件不存在

    我正在尝试安装 配置 Selenium 以在队友不在办公室时进行一些 UI 测试 我已经安装了 Selenium Webdriver 和 Eclipse 以及 Chrome Firefox 和 Edge 浏览器驱动程序 我有一些非常简单的脚
  • Mockito - 监视真实对象调用原始方法

    想象一下下面的代码 List list List spy spy list doThrow new NullpointerException when spy get 0 doThrow 执行list get 0 这根本没有意义 我想定义模
  • Spring:url 无法正确解析链接

    尽管我对 Java 有丰富的经验 但我对 Spring 框架和 Web 应用程序还很陌生 当我在本地 tomcat 服务器上运行我的网站时 URL 为 http localhost 8080 myApp 现在 请求映射将我委托到我的主页 R
  • JavaFX TabPane 禁用按键切换选项卡

    我有一个Tab有一些内容 ScrollBar和别的 The ScrollBar has event handler for keys left and right 但如果我按下这些按钮Tabs被切换 因为TabPane还有一个密钥处理程序
  • HTTP 状态 500 - servlet spring-dispatcher 的 Servlet.init() 引发异常

    我在学习春季MVC当我尝试运行 html 文件时 它给出错误 HTTP状态 500 Servlet init 对于 servlet spring dispatcher 抛出异常 这是我的 web xml
  • JavaFX 多线程 - 连接线程不会更新 UI

    我正在尝试创建一个加载程序对话框 用户可以在其中知道程序正在加载所请求的内容并且程序正在按预期运行 但正因为如此 我需要join 解析器线程和之前继续主线程 这使得对话框空白 解析器任务 java public class ParserTa
  • 如何在 Spring Security 中创建自定义身份验证过滤器?

    我正在尝试创建一个自定义 Spring Security 身份验证过滤器以实现自定义身份验证方案 我花了几个小时阅读 Spring Security 但我找到的所有指南都解释了如何配置基本设置 我正在尝试编写自定义设置 但无法找到有关如何执
  • 在 Java 中,对复杂模型使用接口是否会带来性能提升?

    标题很难理解 但我不知道如何以另一种方式总结 欢迎任何澄清的编辑 我被告知并建议使用接口来提高性能 即使在并不特别需要常规 接口 角色的情况下也是如此 在这种情况下 对象是大模型 MVC 意义上的 具有许多方法和字段 向我推荐的 好用处 是
  • new Date() 和日历日期之间的区别

    在实践中 下面两个日期有什么区别 Date date new Date Date date Calendar getInstance getTime 我的理解是 new Date 是基于 UTC GMT 的日期 而日历的 getTime 基
  • Java KeyListener:按下两个键时如何执行操作?

    请看下面的代码 import java awt event import javax swing import java awt public class KeyCheck extends JFrame private JButton ch
  • 使用 Spring Java 配置自动装配 bean

    是否可以使用Spring的 Autowired用 Java 编写的 Spring 配置中的注释 例如 Configuration public class SpringConfiguration Autowired DataSource d
  • Java中对象类的继承

    当我读java书时 我遇到了 每个类都扩展类 Object 但是如果想要 B 类扩展 A 类 但是 B 类现在将具有多重继承 一个来自 Object 类 一个来自 A 类 如何解决冲突 谁能解释一下吗 它是多级继承 而不是多重 class
  • 针对未经身份验证的用户的 Spring Security 404 页面

    我正在使用 Spring Boot 和 Thymeleaf 我有一个自定义 404 模板页面定义在src main resources templates error 404 html 当用户登录时这可以正常工作 然而 当他们注销时 他们不
  • FirebaseAuth.getInstance().signOut() 不注销

    我尝试从 firebase 注销用户 但在关闭应用程序并再次打开后 用户仍然处于连接状态 我尝试从 firebase 定期注销用户 但没有解决问题 我想知道是什么导致了这个问题 logout setOnClickListener new V
  • ACTION_MEDIA_BUTTON 的广播接收器不起作用

    我正在为 Android 操作系统版本 4 0 3 ICS 编写 Android 应用程序 问题是我没有从 BroadcastReceiver 的 onReceive 方法中的 Log d 获得输出 这意味着我的应用程序没有正确处理广播 我
  • Selenium WebDriver (java) 可以与浏览器的检查工具元素选择器交互吗?

    通过使用 selenium 我可以访问位于检查选项卡中的浏览器元素选择器 在浏览器中按 Ctrl Shift C 吗 我想使用该选择器 指向 一个元素 并使其在浏览器中突出显示 例如 简单的事情如下 WebElement elem driv
  • a.equals(a) 什么时候返回 false?

    我想知道在哪些情况下java中的变量不能相等 使用equals 方法 自身 我这里说的不是对象而是变量本身 只要代码编译并在调用 equals 时返回 false 到目前为止 我发现的唯一情况是 public class A public
  • Java/Android 字符串到颜色的转换

    我正在制作一个应用程序 我希望能够通过用户输入 edittext 和十六进制值设置各种颜色 例如 eeeeee等等 问题是我似乎不知道如何转换它们 如果我在代码中做这样的事情 它工作得很好 标题栏 setBackgroundColor 0x

随机推荐

  • Ajax 调用可以在 DOM 加载之前完成吗?

    我通过 jQuery Ajax 调用抓取数据 并将其显示在页面上 我需要等待 DOM 加载和 Ajax 调用完成 然后才能使用数据将其显示在页面上 Ajax 调用能否在 DOM 加载之前完成 我只是想确定需要将操作 DOM 并使用我返回的数
  • JavaFX 鼠标位置

    我需要在我的应用程序中获取鼠标单击的 x 和 y 坐标 我通过创建一个点在下面的代码中部分解决了这个问题 但根据我在屏幕上移动应用程序窗口的位置 我不断获得不同的坐标 稍后我需要一些恒定的东西来识别某些物体 感谢您的帮助 Override
  • 理解使用 std::condition_variable 的示例

    有一个使用的例子condition variable取自cppreference com include
  • Angular 2 Material 自定义主题

    我正在使用 Angular 2 和 Angular Material 我需要创建一个自定义主题 以便为组件使用自定义颜色 我跟着角度文档 但我无法让它运行 到目前为止我做了什么 1 我创建了一个文件my theme scss import
  • Apache 将 http 重定向到 https 以及将非 www 重定向到 www

    我遇到了 apache2 的问题 我想将端口 80 重定向到端口 443 但也将非 www 重定向到 www 在以下配置中 我的 http 到 https 重定向工作正常
  • 在python中合并具有不同时间频率的系列/数据帧

    我正在尝试合并两个系列 一个以小时为单位 另一个以分钟为单位 并将索引保 持在分钟级别 Series A time 2017 09 01 01 00 00 0 5 2017 09 01 02 00 00 0 4 Freq H Name A
  • 在 shell 脚本中传递通配符以剪切命令并将其存储在变量中

    我是 shell 新手 有一种情况是我试图评估特定列的唯一值 以检查它们在稍后调用的 shell 脚本中是否有效 从我的搜索来看 我认为剪切和排序和独特是很好的做法 所以我的尝试是 file filepath vendor csv file
  • 猫头鹰轮播 - 为同一页面上放置的多个滑块中的每个滑块设置不同的项目编号

    我有一个带有多个滑块的页面 这些滑块是用猫头鹰轮播创建的 我想为每个滑块定义不同数量的可见项目 完美的解决方案是在 HTML 中定义可见项的数量 作为类或数据 我刚刚开始使用 jQuery 所以我只能使用数据属性来传递一个值 如下所示 di
  • 如何使用更少的代码计算元素的宽度和高度及其填充/边距值?

    我在用height width 方法 但其返回值没有填充和边距值 我在计算总高度值时没有问题 这种方法有效 但我的问题是 计算所有这些都太长了 有没有一种方法可以用更少的代码来计算这些并且没有错误 这是 jsFiddle 示例 jQuery
  • OCaml - 找不到graphics.cma

    在顶层加载图形模块时 出现错误 找不到graphics cma 我正在使用 OS X 并且我很确定我已经正确安装了 OCaml 因为我已经使用它大约一个月了 所以看来 Graphics 模块没有包含在 OCaml 包中 如何解决此问题 或者
  • 在 Debian 上实现 Python 3 机械化的最简单方法是什么?

    我最近想移植我的刮刀mechanize Browser到Python 3 我还没有找到任何python3 mechanize包或类似的东西 我还不熟悉使用一些特殊程序构建 Python 模块 所以我不知道如何使用2to3那里 有什么建议么
  • 德尔福印地 Ping 错误 10040

    我有一小段代码可以通过 ping 来检查计算机是否处于活动状态 我们曾经有一个有 40 台计算机的房间 我想通过我的程序远程检查它是否处于活动状态 因此我使用 indy 编写了一个小 ping 函数 function TMainForm P
  • 符号工具箱从符号名称中删除最后的“点”

    我遇到了八度符号工具箱的奇怪行为 其中符号变量以结尾 dot输掉决赛dot suffix pkg load symbolic clear clc syms xxxdot syms Symbolic variables in current
  • Windows7 Batch,如何在第一个For循环后中断

    我正在编写一个简单的脚本来检索以 IP 形式给出的本地主机地址 为了获取我的 IPv4 地址 Win7 我编写了简单的 FOR 循环 但结果我从最后一个循环代替第一 这是批处理代码 cls for f tokens 1 2 delims a
  • Plotly:如何使用plotly和plotlyexpress绘制回归线?

    我有一个数据框 df 其中包含 pm1 和 pm25 列 我想用一张图表 用 Plotly 显示这两个信号的相关程度 到目前为止 我已经成功地显示了散点图 但我无法绘制信号之间相关性的拟合线 到目前为止 我已经尝试过 denominator
  • 在Linux中使用命令行将xlsx转换为csv

    我正在寻找一种在 Linux 上将 xlsx 文件转换为 csv 文件的方法 我不想使用 PHP Perl 或类似的东西 因为我正在考虑处理数百万行 所以我需要快速的东西 我在 Ubuntu 存储库上找到了一个名为 xls2csv 的程序
  • Git 大文件存储背后的存储机制是什么?

    Github最近推出了一个扩大git 以不同的方式存储大文件 他们到底是什么意思扩展用 Git 内的文本指针替换大文件 您可以在git lfs 源 how a 文本指针 被定义 type Pointer struct Version str
  • QTableView 中只有复选框的列

    我在 Sqlite 数据库中有一个表 我使用 QTableview 和 QSqlQueryModel 显示该表 第一列需要有一个标题 它是一个复选框 并且该列中的所有项目也需要是复选框 我已将第一个列标题实现为复选框 并且效果很好 由于列中
  • WCF 4 REST 服务的正确配置是什么?

    很抱歉发布这个消息 但这让我发疯 我在 VS2010 中的 WCF4 REST 模板中使用路由 我将 maxreceivedmessagesize 属性设置为某个巨大的数字 当我尝试向服务提交 xml 时 它仍然给出 HTTP 状态代码 4
  • 通过 BouncyCastle 进行 CSR 签名生成的证书被视为不受信任

    我正在努力解决以下问题 我有一个 CSR 我使用此代码签署 Override public X509Certificate signCSR Reader pemcsr int validityDays throws APIException