Skip to content

Instantly share code, notes, and snippets.

import jsrsasign from 'jsrsasign';
// 証明書A(サーバ証明書) "leaf certificate"とも
const certAStr = `-----BEGIN CERTIFICATE-----
MIIHZDCCBkygAwIBAgIMR79ApI1LvDScvJ+hMA0GCSqGSIb3DQEBCwUAMGIxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTgwNgYDVQQDEy9HbG9iYWxTaWduIEV4dGVuZGVkIFZhbGlkYXRpb24gQ0EgLSBTSEEyNTYgLSBHMzAeFw0yMTA0MTIxOTU3MjRaFw0yMjA1MTQxOTU3MjRaMIIBIDEdMBsGA1UEDwwUUHJpdmF0ZSBPcmdhbml6YXRpb24xETAPBgNVBAUTCEMzNDU0Mjg0MRMwEQYLKwYBBAGCNzwCAQMTAlVTMRswGQYLKwYBBAGCNzwCAQITCkNhbGlmb3JuaWExCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MSgwJgYDVQQJEx8yNTcwIFcuIEVsIENhbWlubyBSZWFsLCBTdGUgMTUwMRkwFwYDVQQLExBNZXRhZGF0YSBTZXJ2aWNlMRwwGgYDVQQKExNGSURPIEFMTElBTkNFLCBJTkMuMR0wGwYDVQQDExRtZHMuZmlkb2FsbGlhbmNlLm9yZzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMj7AWgfM95ePexLcCuu+otyYFwLuKI811j7CPJzHOYQ/BgWvPIjvyPsOlmgetuUbxlhIr1nbd0BXy1oYF/Zuvoqy0/IYvb3R17FQa4bbhhhuVIXw40nuSGSUu5/z6Hmtu+kuGB3vq5wQGhxrn73Q4jn/dlwWnLT5suF6omSttasy99OZzFXQ/nIi6JSCANxfjRzek3y2uN5evjPnR12Eu/eXArNtw27jSPjSP+Gt5UHCiHnM
@s1r-J
s1r-J / node_certification_chain.js
Created August 25, 2021 14:57
Node.jsで証明書チェーンを検証する
import {
pki,
} from 'node-forge';
// 証明書A(サーバ証明書)
const certAStr = `-----BEGIN CERTIFICATE-----
MIIHZDCCBkygAwIBAgIMR79ApI1LvDScvJ+hMA0GCSqGSIb3DQEBCwUAMGIxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTgwNgYDVQQDEy9HbG9iYWxTaWduIEV4dGVuZGVkIFZhbGlkYXRpb24gQ0EgLSBTSEEyNTYgLSBHMzAeFw0yMTA0MTIxOTU3MjRaFw0yMjA1MTQxOTU3MjRaMIIBIDEdMBsGA1UEDwwUUHJpdmF0ZSBPcmdhbml6YXRpb24xETAPBgNVBAUTCEMzNDU0Mjg0MRMwEQYLKwYBBAGCNzwCAQMTAlVTMRswGQYLKwYBBAGCNzwCAQITCkNhbGlmb3JuaWExCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MSgwJgYDVQQJEx8yNTcwIFcuIEVsIENhbWlubyBSZWFsLCBTdGUgMTUwMRkwFwYDVQQLExBNZXRhZGF0YSBTZXJ2aWNlMRwwGgYDVQQKExNGSURPIEFMTElBTkNFLCBJTkMuMR0wGwYDVQQDExRtZHMuZmlkb2FsbGlhbmNlLm9yZzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMj7AWgfM95ePexLcCuu+otyYFwLuKI811j7CPJzHOYQ/BgWvPIjvyPsOlmgetuUbxlhIr1nbd0BXy1oYF/Zuvoqy0/IYvb3R17FQa4bbhhhuVIXw40nuSGSUu5/z6Hmtu+kuGB3vq5wQGhxrn73Q4jn/dlwWnLT5suF6omSttasy99OZzFXQ/nIi6JSCANxfjRzek3y2uN5evjPnR12Eu/eXArNtw27jSPjSP+Gt5UHCiHnM9RL81uS13It73WmFj7g
function base642ab(base64) {
const str = window.atob(base64);
const len = str.length;
const bytes = new Uint8Array(len);
for (let i = 0; i < len; i++) {
bytes[i] = str.charCodeAt(i);
}
return bytes.buffer;
}
function ab2str(ab) {
return String.fromCharCode.apply(null, new Uint16Array(ab));
}
function str2ab(str) {
const buf = new ArrayBuffer(str.length * 2);
const bufView = new Uint16Array(buf);
for (let i = 0; i < str.length; i++) {
bufView[i] = str.charCodeAt(i);
}
function arraybuffer2str(ab) {
return String.fromCharCode.apply(null, new Uint16Array(buf));
}
function str2arraybuffer(str) {
let buf = new ArrayBuffer(str.length * 2);
let bufView = new Uint16Array(buf);
for (let i = 0; i < str.length; i++) {
bufView[i] = str.charCodeAt(i);
}
import base64url from 'base64url';
function arraybuffer2base64url(ab) {
return base64url.encode(Buffer.from(ab), 'utf8');
}
function base64url2arraybuffer(b64u) {
let buf = base64url.toBuffer(b64u);
return this.buffer2arraybuffer(buf);
}
@s1r-J
s1r-J / zap.bat
Created February 23, 2021 11:21
C:\Program Files\OWASP\Zed Attack Proxy直下に配置
if exist "%USERPROFILE%\OWASP ZAP\.ZAP_JVM.properties" (
set /p jvmopts=< "%USERPROFILE%\OWASP ZAP\.ZAP_JVM.properties"
) else (
set jvmopts=-Xmx512m
)
java %jvmopts% -jar zap-2.10.0.jar %*
@s1r-J
s1r-J / copy markdown link
Last active April 17, 2021 16:16
閲覧してるサイトのマークダウン記法リンクを取得するブックマークレット
@s1r-J
s1r-J / main.js
Created November 26, 2018 15:09
初めてのChrome拡張機能としてGitHubでStarをつけたリポジトリをタグで管理できる機能を作った ref: https://qiita.com/s1r/items/1a060f2173e2849aebab
$('head').append($('<link>', {
rel: 'stylesheet',
href: chrome.extension.getURL('css/style.css'),
}));
@s1r-J
s1r-J / selection-advanced-usage.html
Created October 3, 2018 14:42 — forked from prateekkalra/selection-advanced-usage.html
add CSS opacity property to config of Selection-js
<script src="selection.min.js"></script>
<script>
var selection = new Selection();
selection.config({
facebook: true,
twitter: true,
search:true,
copy:true,
speak:true,
backgroundColor: 'crimson',