为清楚起见,这些可能被表述为单独的问题,但它们都与同一问题有关.
SSL证书服务器名称是如何解析的?
为什么浏览器似乎使用证书的CN字段,但Java的机制似乎只关注"主题替代名称"?
是否可以使用keytool为SSL证书添加备用名称?如果没有,是使用openSSL而不是一个好的选择?
只是一点背景:我需要让主服务器使用HTTPS与多个服务器通信.显然,我们不想为每个服务器购买SSL证书(可能有很多),所以我想使用自签名证书(我一直使用keytool来生成它们).在操作系统中添加证书后,浏览器(IE和Chrome)很乐意接受该连接为可信任的.但是,即使将证书添加到Java的cacerts之后,Java仍然不会将该连接接受为受信任,并抛出以下异常:
引起:java.security.cert.CertificateException:在sun.security.util.HostnameChecker.match(HostnameChecker.java:75)的sun.security.util.HostnameChecker.matchIP(HostnameChecker.java:142)中没有主题备用名称. at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkIdentity(X509T rustManagerImpl.java:264)at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:250)at com. sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(Clien tHandshaker.java:1185)... 14更多
我发现我可以让Java信任实现我自己的HostNameVerifier的证书,我从这里复制了:com.sun.jbi.internal.security.https.DefaultHostnameVerifier只是为了测试(顺便说一句,主机名作为参数传递给HostnameVerifier是正确的,所以我认为应该已经接受了).
我一直使用证书字段CN作为主机名(通常是IP地址).
任何人都可以告诉我,如果我做错了什么,并指出我正确的方向?
我有一个使用Groovy来解释脚本的小包.
清单Import-Package指令如下所示:
Import-Package: groovy.util;version="[1.8,2)"
Run Code Online (Sandbox Code Playgroud)
上面的版本范围明确指出导入版本必须介于1.8(含)和2.0(独占)之间.
当我在仅安装了Groovy 1.8.6的OSGi环境中运行此捆绑包时,它按预期工作...当我键入时inspect package requirement 4,它打印:
-> com.athaydes.gradle.osgi.groovy-1-8-6-runner [4] imports packages:
------------------------------------------------------------------
ipojo.example.code; version=0.0.0 -> com.athaydes.gradle.osgi.code-runner-api [1]
groovy.util; version=1.8.6 -> groovy-all [5]
Run Code Online (Sandbox Code Playgroud)
这正是我所期望的,当我要求CodeRunner解释这个Groovy片段时:
GroovySystem.version
Run Code Online (Sandbox Code Playgroud)
它正确返回1.8.6.
现在,当我启动安装了Groovy 1.8.6和2.3.3的OSGi环境时,当我检查包的包时,我得到了这个:
-> com.athaydes.gradle.osgi.groovy-1-8-6-runner [4] imports packages:
------------------------------------------------------------------
ipojo.example.code; version=0.0.0 -> com.athaydes.gradle.osgi.code-runner-api [1]
Run Code Online (Sandbox Code Playgroud)
该groovy.util进口消失(即使清单仍然有它,当然)!现在,当我跑步时,GroovySystem.version我得到2.3.3,而不是1.8.6应该是!
这是一个疯狂的东西,似乎只是一个新版本的Groovy存在的事实打破了OSGi的承诺,我应该能够使用我想要的任何版本的依赖.
我已经在Felix和Equinox中对此进行了测试,结果完全相同.
我还在清单中使用了精确版本而不是范围,但这并没有改变任何东西.
任何人都可以看到这里到底发生了什么?
PS.如果你不相信我,试试自己,这是GitHub上的项目:https://github.com/renatoathaydes/osgi-run/tree/next/osgi-run-test/ipojo-dosgi
我正在使用Flutter将"资产"加载到File一个本地应用程序可以访问它.
这是我加载资产的方式:
final dbBytes = await rootBundle.load('assets/file');
Run Code Online (Sandbox Code Playgroud)
这将返回一个实例ByteData.
如何将其写入dart.io.File实例?
我试图在Macbook Pro上启动NetBeans 8.2并且它无法正常工作.
它显示了启动画面,然后在一段时间后它关闭而没有启动任何东西.
从命令行运行我可以看到这个错误:
Oct 02, 2017 7:40:28 PM org.netbeans.ProxyURLStreamHandlerFactory register
SEVERE: No way to find original stream handler for jar protocol
java.lang.reflect.InaccessibleObjectException: Unable to make field transient java.net.URLStreamHandler java.net.URL.handler accessible: module java.base does not "opens java.net" to unnamed module @7823a2f9
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:337)
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:281)
at java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:175)
at java.base/java.lang.reflect.Field.setAccessible(Field.java:169)
at org.netbeans.ProxyURLStreamHandlerFactory.register(ProxyURLStreamHandlerFactory.java:82)
at org.netbeans.JarClassLoader.<clinit>(JarClassLoader.java:141)
at org.netbeans.MainImpl.execute(MainImpl.java:178)
at org.netbeans.MainImpl.main(MainImpl.java:85)
at org.netbeans.Main.main(Main.java:83)
Run Code Online (Sandbox Code Playgroud)
看起来Java 9与它捆绑在一起并导致错误.该文档暗示NetBeans 8.2使用JDK 8!?
如何使用我自己的java来运行NetBeans,或者如何在没有此错误的情况下启动NetBeans?
尝试使用需要字符串的 Zig 库...但我从 C 库获得了字符串缓冲区。
这意味着我需要将类型值传递[*c]u8给接受[:0]const u8.
怎么做?
到目前为止我发现了这种方法:
const buffer: [*c]u8 = callC();
const str = std.mem.span(@ptrCast([*:0]const u8, buffer));
Run Code Online (Sandbox Code Playgroud)
这看起来比应有的更复杂(并且制作了副本??)。
Zig 文档说:
字符串文字是指向 u8 的以 null 结尾的数组的 const 指针。
所以我认为它们是兼容的 C 字符串,并且像这样的非常简单的转换@as([*:0]const u8, buffer)就足够了?
我试图让我的应用程序与Java 9一起运行,但不幸的是,当它尝试使用加载资源时,其中一个普通的jar依赖项classLoader.getResource(name)会获得null.
当然,这适用于Java 8.
我使用模块文件声明了对相关模块的依赖,通过其jar名称引用模块的名称(糟糕),并使用该--module-path选项添加jar原样(没有Java 9的自定义).
这是我的近似模块文件声明:
module my.mod {
requires ivy; // the file is called ivy-2.4.0.jar
}
Run Code Online (Sandbox Code Playgroud)
我用这个命令运行:
java --module-path my-mod.jar:ivy-2.4.0.jar -m my.mod
Run Code Online (Sandbox Code Playgroud)
当我运行应用程序时,如果库不尝试加载该资源,它可以正常工作......但如果它运行,它会NullPointerException在它尝试使用该资源的行处获得一个.
我可以看到资源存在于jar文件中的正确路径中.
我已经尝试将我的应用程序作为jar运行(如上所示)并且只运行类文件:
java --module-path modules-dir:ivy-2.4.0.jar -m my.module/my.Main
Run Code Online (Sandbox Code Playgroud)
在后一种情况下,错误是不同的,但相关:Ivy甚至找不到它试图从自己的jar加载的属性文件!
有没有解决方法,这是一个已知的错误,还是我做错了什么?
我试图理解 Rust 多态性。从我的 OOP 背景来看,我希望以下 Rust 代码能够工作:
use std::io::{stdin, Read};
fn main() {
let r: Read = stdin();
println!("ok");
}
Run Code Online (Sandbox Code Playgroud)
但它没有:
use std::io::{stdin, Read};
fn main() {
let r: Read = stdin();
println!("ok");
}
Run Code Online (Sandbox Code Playgroud)
我知道有一个Readimpl for StdIn,那么我怎样才能使这个(或任何正确的方法来做到这一点)工作,即。use Stdin,或 a File,或什至是 aString如果可能(无法找到实现)在Read预期a 的地方使用?
我不认为我可以在这里使用泛型,因为我需要将 的实例(r可以是任何实现的Read)传递给另一个方法,但如果我错了,请告诉我。
随着Dart 2.14版本的发布,pub 现在支持.pubignore类似于.gitignore.
这些文档似乎没有提到什么内容适合包含在其中......有什么指导方针吗?
我立即想到的是,我不应该包含测试,这些测试目前与我的包一起发布。可能还有其他与开发相关的东西,在编译生产代码时不需要?!
它是否正确?还有其他值得忽略的事情吗?
我在Linux Mint机器上安装了最新版本的Java(HotSpot VM 1.7.0_45)并使用Gradle 1.8.我也安装了Groovy,版本1.8.6,但我认为这并不重要,因为Gradle有自己的groovy-all.jar.
我的问题是我无法使用gradle编译我的Groovy项目,因为JavaFX类似乎不在类路径中.错误是这样的:
unable to resolve class javafx.scene.Node
@ line 3, column 1.
import javafx.scene.Node
Run Code Online (Sandbox Code Playgroud)
我最后通过在我的依赖项中添加以下可怕的硬编码路径来解决这个问题:
compile files( "/usr/lib/jvm/java-7-oracle/jre/lib/jfxrt.jar" )
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法将JavaFX添加到Gradle的编译类路径中,以便所有项目都可以看到它,而不必将其添加到每个项目中?
我已经尝试了我能想到的一切:
ext文件夹,这样我现在可以用javac编译java类并运行它们java(我知道在这个版本的Java中JavaFX jar应该已经在JDK的类路径中了,但在执行此操作之前,我仍然无法运行,而不是编译我的Java应用程序.还在groovy类路径中添加了一个到同一个jar的软链接,这样我就可以从groovy shell中执行如下所示的操作并且它可以工作:
将javafx.application.Application导入为A; println A.
这也适用于Groovy控制台.
它只适用于Gradle!
谢谢你的帮助.
我正在努力学习Pony,并且由于显而易见的原因,我想要做的第一件事就是打印值.
但是,它似乎对大多数事情都不起作用,例如:
env.out.print(2 + 2)
Run Code Online (Sandbox Code Playgroud)
给出错误:
Could not infer literal type, no valid types found
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
let four: U32 = 2 + 2
env.out.print(four)
Run Code Online (Sandbox Code Playgroud)
但是这给出了一个更加丑陋的错误,说我需要一些属于它的子类型ByteSeq.很好,但我怎么得到其中一个?